我有一堆用户输入的日期和时间,像这样:
date = "01:00pm 06/03/2015"
我正试图将它们提交到数据库中的datetime
列,我正试图将它们系统化,像这样:
DateTime.strptime(date, '%m/%d/%Y %H:%M')
但是我总是得到无效的日期错误。我做错了什么?如果我提交没有strptime
的字符串,记录将保存,但有时会得到错误的日期。
另外,我如何将时区附加到DateTime
对象?
因此.to_datetime
和DateTime.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