在我的Rails App(Rails 2.3.14和Ruby 1.8.7)中,我试图将日期时间字符串转换为其他格式,以便在MySQL数据库上执行搜索,但出现invalid date
错误,而且似乎无法弄清楚为什么,我已经阅读了很多类似的问题,但是我似乎仍然无法解决问题。
# check if filter contains a time stamp
if params[:sSearch].include?('/') and params[:sSearch].include?(':')
datetime = DateTime.strptime(params[:sSearch], "%Y-%m-%d %H:%M")
params[:sSearch] = datetime
end
示例场景
04/11/13 16:14
应该转换为
2013-11-04 16:14
我认为可能与以下事实有关:秒数未包含在字符串的前端表示中,因为datetime
数据库表中的精确度是多少,2013-11-04 16:14:52
所以我现在加入了秒数,但仍然出现相同的错误,我没有我认为这无关紧要,因为我LIKE
在搜索字词的两边都使用了带通配符的操作数,因此即使没有秒,它也能正常工作。
您应使用斜杠格式,并将%Y
(四位数年份)替换为%y
(缩写两位位数年份)以获得所需的结果。此外,日期字段的顺序颠倒了。正确的格式为:
"%d/%m/%y %H:%M"
我认为您混淆了strptime
和的目的strftime
。而p
在strptime
看台上的“解析”(让DateTime
来自String
)时,f
在strftime
看台上的“格式”(另一方向)。
require 'date'
DateTime.strptime("04/11/13 16:14", "%Y-%m-%d %H:%M")
# ArgumentError: invalid date
DateTime.strptime("04/11/13 16:14", "%d/%m/%Y %H:%M")
#=> #<DateTime: 0013-11-04T16:14:00+00:00 ((1722836j,58440s,0n),+0s,2299161j)>
# Wrong! You do not want the year 0013, but 2013
DateTime.strptime("04/11/13 16:14", "%d/%m/%y %H:%M")
#=> #<DateTime: 2004-11-13T16:14:00+00:00 ((2453323j,58440s,0n),+0s,2299161j)>
# Correct
您可以稍后将其转换为所需的格式,DateTime#strftime
如下所示:
# parse the user input to a DateTime object
datetime = DateTime.strptime("04/11/13 16:14", "%d/%m/%y %H:%M")
# reformat it
params[:sSearch] = datetime.strftime("%Y-%m-%d %H:%M")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句