Time.strptime不解析周格式化程序?

时间:2014-05-13 19:09:56

标签: ruby

使用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的正确方法是什么?

1 个答案:

答案 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