ruby 中解析 2020-W9 日期的好方法是什么
What is the nice way in ruby to parse 2020-W9 dates
我从 Alexa 得到这样的周格式 2020-W9
,但是对于 ruby Date.parse
我需要这种格式 2020-W09
。
我想知道什么是好的 ruby 解决方案。如果有一些内部库可以将 W9
转换为 W09
或一些单行函数。
你可以用这个
irb(main):003:0> "2020-W9".gsub('-W','-W0')
"2020-W09"
irb(main):010:0> fdate = (date.match(/-W(\d+)/)[1].to_i <= 9)? date.gsub('-W','-W0') : date
"2020-W09"
irb(main):011:0> date = "2020-W10"
"2020-W10"
irb(main):012:0> fdate = (date.match(/-W(\d+)/)[1].to_i <= 9)? date.gsub('-W','-W0') : date
"2020-W10"
irb(main):013:0>
应该这样做:
"2020-W9".sub(/(?<=-W)\d\z/, '0[=10=]') # => "2020-W09"
"2020-W19".sub(/(?<=-W)\d\z/, '0[=10=]') # => "2020-W19"
它只会在数字前加上 0
。
如果您知道确切的格式,您应该使用 strptime
而不是 parse
。它更具体并且解析值时不带前导零就好了:
require 'date'
Date.strptime('2020-W9', '%Y-W%W')
#=> #<Date: 2020-03-02 ((2458911j,0s,0n),+0s,2299161j)>
%Y
是一个 4 位数的年份,%W
是从星期一开始的周数。如果您的周从星期日开始,还有 %U
:
Date.strptime('2020-W9', '%Y-W%U')
#=> #<Date: 2020-03-01 ((2458910j,0s,0n),+0s,2299161j)>
或 %G
/ %V
用于基于 ISO 8601 的日期:(这似乎是 parse
returns)
Date.strptime('2020-W9', '%G-W%V')
=> #<Date: 2020-02-24 ((2458904j,0s,0n),+0s,2299161j)>
我从 Alexa 得到这样的周格式 2020-W9
,但是对于 ruby Date.parse
我需要这种格式 2020-W09
。
我想知道什么是好的 ruby 解决方案。如果有一些内部库可以将 W9
转换为 W09
或一些单行函数。
你可以用这个
irb(main):003:0> "2020-W9".gsub('-W','-W0')
"2020-W09"
irb(main):010:0> fdate = (date.match(/-W(\d+)/)[1].to_i <= 9)? date.gsub('-W','-W0') : date
"2020-W09"
irb(main):011:0> date = "2020-W10"
"2020-W10"
irb(main):012:0> fdate = (date.match(/-W(\d+)/)[1].to_i <= 9)? date.gsub('-W','-W0') : date
"2020-W10"
irb(main):013:0>
应该这样做:
"2020-W9".sub(/(?<=-W)\d\z/, '0[=10=]') # => "2020-W09"
"2020-W19".sub(/(?<=-W)\d\z/, '0[=10=]') # => "2020-W19"
它只会在数字前加上 0
。
如果您知道确切的格式,您应该使用 strptime
而不是 parse
。它更具体并且解析值时不带前导零就好了:
require 'date'
Date.strptime('2020-W9', '%Y-W%W')
#=> #<Date: 2020-03-02 ((2458911j,0s,0n),+0s,2299161j)>
%Y
是一个 4 位数的年份,%W
是从星期一开始的周数。如果您的周从星期日开始,还有 %U
:
Date.strptime('2020-W9', '%Y-W%U')
#=> #<Date: 2020-03-01 ((2458910j,0s,0n),+0s,2299161j)>
或 %G
/ %V
用于基于 ISO 8601 的日期:(这似乎是 parse
returns)
Date.strptime('2020-W9', '%G-W%V')
=> #<Date: 2020-02-24 ((2458904j,0s,0n),+0s,2299161j)>