Ruby on rails Ruby Time.parse给了我超出范围的错误

Ruby on rails Ruby Time.parse给了我超出范围的错误,ruby-on-rails,ruby,datetime,time,Ruby On Rails,Ruby,Datetime,Time,我正在使用Time.parse从字符串创建时间对象 出于某种原因 Time.parse("05-14-2009 19:00") 导致参数的范围错误,而 Time.parse("05-07-2009 19:00") 不 有什么好主意吗?我猜是希望第二部分(14)是这个月 它可能是预期的日-月-年格式,因此您的第一个值尝试指定第14个月的第5天 如果您知道字符串的格式,请使用: Time.strptime(date, format, now=self.now) {|year| ...}

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

出于某种原因

Time.parse("05-14-2009 19:00")
导致参数的范围错误,而

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


有什么好主意吗?

我猜是希望第二部分(14)是这个月


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

如果您知道字符串的格式,请使用:

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

它将解决您的问题,并且可能比
时间更快。解析

编辑:

看起来他们从Time类中获取了
strtime
,但它还是调用了
Date.strtime
。如果您在轨道上,您可以执行以下操作:

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

另请参见:.

这是因为
时间#解析
的启发

这是由于英美模式

带破折号“-”的字符表示mm dd yyyy,带斜杠“/”的字符表示dd/mm/yyyy


这种行为在1.9中有意改变。要实现eur、iso和jp日期标准。

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

strtime看起来很酷,但我有一个未定义的Time方法。strtime和我需要一个Time对象…这是使用时间。strtime(date_Time['value'],%m-%d-%Y%H:%m)看起来似乎strtime不再存在,请参见编辑以备选择谢谢miguel,该解决方案看起来不错。我最后使用了这样的语句:fixed#date_time=“#{$2}-#{$1}-{$3}{$4}:#{$5}”if date#time['value']=~/(\d{2})-(\d{2})-(\d{4})s(\d{2}):(\d{2})/因为我看到你的帖子晚了。我不打算改变它,因为它可以工作,甚至可能更快。不管怎么说,你投了赞成票,但由于他的链接解决了我的问题,你必须向第一位评论者提供答案。你也可以使用DateTime的strTime,因为Date.strTime不接受有效的每小时时间(仅为日期)
DateTime.strtime(“05-14-2009 19:00,“%m-%d-%Y%H:%m”)。to_time
我认为这里的格式混淆了。对于破折号
-
它期望
dd-mm-yyyyy
yyyy-mm-dd
(在后一种情况下,前两个
y
是可选的),对于斜杠
//code>它期望
mm/dd/yyyyy
(这里前两个
y
也是可选的)。我知道这是一个旧答案,但我看不到描述的行为。我使用的是1.9.2p136。无论我使用“-”还是“/”,Time#parse都将输入解释为dd/mm/yyyy。我上面的注释不正确。对于Ruby 1.8.6和1.8.7,它似乎是
mm/dd/yyyy
,而对于Ruby 1.9.2,它是
dd/mm/yyyy
。两个Ruby都将破折号格式解析为
dd-mm-yyyy
。但我不能100%确定这是否仅仅是因为Ruby版本,或者其他因素是否也会影响解析;例如计算机的日期、时间、区域和/或时区设置。