Rails DateTime有时会提供无效日期而不是其他日期

时间:2015-05-27 09:55:27

标签: ruby datetime ruby-on-rails-4

我有一堆用户输入的日期和时间如下:

date = "01:00pm  06/03/2015"

我试图将它们提交到数据库中的datetime列,并且我试图将它们系统化为这样:

DateTime.strptime(date, '%m/%d/%Y %H:%M')

但我始终收到无效的日期错误。我究竟做错了什么?如果我提交的字符串没有strptime,则记录会保存,但有时会出错。

另外,如何将时区附加到DateTime对象?

修改:

因此.to_datetimeDateTime.parse(date)适用于date字符串,而date2则失败。发生了什么事?

date2 = "03:30pm 05/28/2015"

3 个答案:

答案 0 :(得分:2)

尝试使用to_datetime

date.to_datetime
# => Fri, 06 Mar 2015 13:00:00 +0000

另外,如果您阅读了DateTime#strptimehere的文档。它声明:

  

用给定的方法解析日期和时间的给定表示   模板,并创建一个日期对象。

重要的是要注意模板序列必须与输入字符串序列的序列匹配,在您的情况下不会 - 导致错误。

<强>更新

在第二个示例中使用to_datetime将生成

  

ArgumentError:无效日期

这是因为它希望日期为dd-mm-yy格式。 DateTime.parse会引发同样的错误,因为to_datetime只是后者的api。在非标准自定义日期格式的情况下,您应该使用strptime。这里:

date2 = "03:30pm 05/28/2015"
DateTime.strptime(date2, "%I:%M%p %m/%d/%Y")
# => Thu, 28 May 2015 15:30:00 +0000

答案 1 :(得分:1)

date = "01:00pm  06/03/2015"    
DateTime.parse(date)
=> Fri, 06 Mar 2015 13:00:00 +0000

答案 2 :(得分:0)

您的参数没有按正确的顺序排列。

DateTime.strptime(date, '%H:%M%p %m/%d/%Y')

您还需要为上午/下午后缀添加%p