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

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

最佳答案

这可能是一个错误,因为如果您改用 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/

相关文章:

mysql - Ruby on Rails - 基本表单提交

ruby-on-rails - Carrierwave 在控制台上给出错误

ruby-on-rails - 如何更改 Ruby on Rails 中 page_cache 的 will_paginate 链接格式?

ruby-on-rails - bcrypt 加载错误 : Cannot load such file

ruby-on-rails - 我需要什么基本 gem ?

ruby - 如何从 gemspec 文件中获取版本?

ruby - 如何拆分包含 Ruby 中的集合的字符串?

sql - rails 包含不同的值

ruby - 如何为 Ruby Gem 做贡献

ruby-on-rails - Rails 5 中的 ActionController::InvalidAuthenticityToken