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

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

由于某些原因

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

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

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

才不是

有任何想法吗?

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

此链接可以帮助您解析它。

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

 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 

如果你使用纯ruby,那么你需要:

 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]) 

另请参阅: Ruby on Rails中的日期和时间格式问题 。

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

这是由于英美格式。

用破折号’ – ‘表示mm-dd-yyyy,斜线’/’表示dd / mm / yyyy。

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

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

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