Rails DateTime有时会给出无效的日期,而不是其他日期



我有一堆用户输入的日期和时间,像这样:

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"

尝试使用to_datetime:

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

如果你阅读DateTime#strptime的文档,这里。州:

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

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

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

ArgumentError: invalid date

这是因为它期望日期是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
date = "01:00pm  06/03/2015"    
DateTime.parse(date)
=> Fri, 06 Mar 2015 13:00:00 +0000

您的参数顺序不对。

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

您还需要为am/pm后缀添加%p

相关内容

  • 没有找到相关文章