使用 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
的正确方法是什么?
最佳答案
这可能是一个错误,因为如果您改用 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 。
关于ruby - Time.strptime 不解析周格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23639610/