我有一堆用户输入的日期和时间如下:
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"
答案 0 :(得分:2)
尝试使用to_datetime
:
date.to_datetime
# => Fri, 06 Mar 2015 13:00:00 +0000
另外,如果您阅读了DateTime#strptime
,here的文档。它声明:
用给定的方法解析日期和时间的给定表示 模板,并创建一个日期对象。
重要的是要注意模板序列必须与输入字符串序列的序列匹配,在您的情况下不会 - 导致错误。
<强>更新强>
在第二个示例中使用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