mar*_*n87 2 ruby datetime ruby-on-rails strptime ruby-on-rails-2
在我的Rails应用程序(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
Run Code Online (Sandbox Code Playgroud)
示例场景
04/11/13 16:14
Run Code Online (Sandbox Code Playgroud)
应转换为
2013-11-04 16:14
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为秒不包含在字符串的前端表示中,因为datetime数据库表中的精确是2013-11-04 16:14:52这样的,所以我现在包括秒,但仍然得到相同的错误,我不知道我认为这应该很重要,因为我LIKE在搜索词的任一侧使用带有通配符的操作数,所以即使没有它应该工作的秒数.
您应该使用格式的斜杠并%Y用%y(缩写为两位数年份)替换(四位数年份)以获得所需的结果.此外,日期字段的顺序相反.正确的格式是:
"%d/%m/%y %H:%M"
Run Code Online (Sandbox Code Playgroud)
我觉得你混淆了strptime和的目的strftime.而pin strptime代表"parse"(make DateTimefrom String),而fin strftime代表"format"(另一个方向).
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
Run Code Online (Sandbox Code Playgroud)
您可以稍后将其转换为所需的格式,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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7347 次 |
| 最近记录: |