【问题标题】:Parsing time in Ruby 1.9.2 is not same as Ruby 1.8.7?Ruby 1.9.2 中的解析时间与 Ruby 1.8.7 不同?
【发布时间】:2011-08-27 05:58:02
【问题描述】:

ruby 1.8.7 中解析这个

time_str = "Sun Feb 01 0111 00:00:00 GMT+0530 (IST)"<br />
Time.parse(time_str)<br />
output 
Tue Feb 01 00:00:00 +0530 2011

红宝石 1.9.2

time_str = "Sun Feb 01 0111 00:00:00 GMT+0530 (IST)"<br />
Time.parse(time_str)<br />
output <br />
0111-02-01 00:00:00 +0553 

你能告诉我到底是什么问题吗?

这是否与 ruby​​ 1.9.2 中的 Time 解析方式有关,如下所示?

Time.parse(time) {|y| 0 <= y && y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}

【问题讨论】:

  • 您是真的在处理公元 111 年的日期,还是打错字?
  • 尝试了一下,我认为 1.9.2 能够处理比 1.8.7 更大的日期范围。似乎可以正确地将此日期视为 2 世纪的日期,并且切换时区会做一些有趣的事情。
  • @d11wtq :这不是错字,我的输入是 0111,其中 ruby​​ 187 转换为 2011(这是我想要的)但 ruby​​ 192 没有,请您帮忙。
  • 我不完全确定 0111 在逻辑上应该如何解释为 2011。这是 111 年。如果您无法控制输入源,则必须对字符串进行预处理。跨度>

标签: ruby time ruby-1.9.2 ruby-1.8 datetime-parsing


【解决方案1】:

Ruby 1.9.2 为您提供公元 111 年 2 月 1 日的日期(因为这就是这个日期)。

http://www.wolframalpha.com/input/?i=February+1st+111AD%3F。我认为 1.8.7 无法处理很久以前的日期。

Ruby 1.9.2 做的是正确的事情。

如果你的输入是这样写的,但它确实应该代表 2011 年,那么:

  1. 输入的格式不正确,因为它表示公元 111 年
  2. 您必须对输入字符串进行预处理,使其成为正确的解析格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多