使用Ruby 2.1,我试图找到Time#strftime('%Y%U')
的倒数。例如:
s = Time.parse("2014-05-07 16:41:48 -0700").strftime('%Y%U')
# 201418
t = Time.strptime(s, '%Y%U')
# Expected: 2014-05-04 00:00:00 -0700
# Actual: 2014-01-01 00:00:00 -0800
This topic建议使用%G
,所以我阅读了文档并尝试了它,但我得到的只是当前时间。例如:
t = Time.strptime('201418', '%G%U')
# 2014-05-13 12:07:51 -0700
从文档中,我认为%G
仅适用于%V
,因为它们都是ISO 8601而%U
不是,但即使使用%G%V
也是如此我回到了现在的时间。
那么将%Y%U
字符串转换为相应的Time
的正确方法是什么?
答案 0 :(得分:5)
这可能是一个错误,因为如果您使用DateTime
,它似乎工作正常。
s = Time.parse("2014-05-07 16:41:48 -0700").strftime('%Y%U')
DateTime.strptime(s, "%Y%U")
#<DateTime: 2014-05-04T00:00:00+00:00 ((2456782j,0s,0n),+0s,2299161j)>
修改强>
如果你看一下源代码,这实际上只是愚蠢的编码。 Time.strptime
调用Date._strptime
,正确解析年份和周数。但是Time.strptime
愚蠢地只查找通常的年,月,日,小时等,并完全忽略周数。
我提交了bug report。