Ruby Time.parse让我超出范围错误

时间:2009-04-28 22:36:11

标签: ruby-on-rails ruby datetime time

我正在使用Time.parse从字符串创建Time对象。

出于某种原因

Time.parse("05-14-2009 19:00")

导致参数我们的范围错误,而

Time.parse("05-07-2009 19:00")

没有

有什么想法吗?

5 个答案:

答案 0 :(得分:26)

如果你知道字符串的格式:

Time.strptime(date, format, now=self.now) {|year| ...}   

http://www.ruby-doc.org/core-1.9/classes/Time.html#M000266

它将解决您的问题,可能会比Time.parse快。

编辑:

看起来他们从Time类中获取了strptime,但无论如何它都调用了Date.strptime。如果你在Rails上,你可以这样做:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time

如果您使用纯红宝石,那么您需要:

require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")

Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min], 
         d[:sec], d[:sec_fraction], d[:zone])

另请参阅:Date and Time formating issues in Ruby on Rails

答案 1 :(得分:14)

这是因为Time#parse的启发式。

这是由于英美格式。

使用破折号' - '它需要mm-dd-yyyy,斜杠'/'需要dd / mm / yyyy。

此行为在1.9中故意更改。完成eur,iso和jp日期标准。

答案 2 :(得分:12)

我的猜测是它希望字符串的第二部分(14)成为月份。

This link may help you parse it.

答案 3 :(得分:4)

您可能不需要它来解决这个问题,但我仍然建议您查看自然语言日期/时间解析器Chronic,它已经为我节省了大量的工作。

答案 4 :(得分:0)

可能期待日 - 月 - 年格式,因此您的第一个值是尝试指定第14个月的第5天。