Ruby Time.parse让我超出范围错误
-
03-07-2019 - |
题
我正在使用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
如果您使用纯红宝石,那么您需要:
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])
这是因为 Time#parse
的启发式。
这是由于英美格式。
使用破折号' - '它需要mm-dd-yyyy,斜杠'/'需要dd / mm / yyyy。
此行为在1.9中故意更改。完成eur,iso和jp日期标准。
您可能不需要它来解决此问题,但我仍然建议您查看自然语言日期/时间解析器 Chronic ,它几次为我节省了很多工作。
可能期待日 - 月 - 年格式,因此您的第一个值是尝试指定第14个月的第5天。
不隶属于 StackOverflow