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)>