Ruby on rails Ruby Time.parse给了我超出范围的错误
我正在使用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("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版本,或者其他因素是否也会影响解析;例如计算机的日期、时间、区域和/或时区设置。