是否有办法解析格式为“DD / MM / YYYY HH:MM:SS”的时间戳字符串,而不循环使用多个日期格式字符串,以便时间可选。
一厢情愿的例子:
"01/01/2014" -> 01/01/2014 00:00:00
"01/01/2014 10:00" -> 01/01/2014 10:00:00
试图使用DateTime.strptime("01/01/14 12:00", "%d/%m/%Y %H:%M:%S")
,但显然是因为没有秒而出错。
答案 0 :(得分:5)
您可以使用case..when
构建和模式编写自定义方法,如下所示:
require 'time'
require 'date'
def parse_date_time(string)
case string
when /\d{2}\/\d{2}\/\d{4}/
DateTime.strptime( string, "%d/%m/%Y" )
when /\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2}/
DateTime.strptime( string, "%d/%m/%Y %H:%M" )
when /\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2}:\d{2}/
DateTime.strptime( string, "%d/%m/%Y %H:%M:%S" )
end
end
parse_date_time('01/01/2014 10:00:12')
# => #<DateTime: 2014-01-01T00:00:00+00:00 ((2456659j,0s,0n),+0s,2299161j)>
parse_date_time('12/07/2011')
# => #<DateTime: 2011-07-12T00:00:00+00:00 ((2455755j,0s,0n),+0s,2299161j)>
答案 1 :(得分:2)
假设您尝试解析的日期采用%d/%m/%Y %H:%M:%S
格式,可能缺少小时,分钟或秒,DateTime.parse
方法应执行以下操作:
require 'date'
DateTime.parse("01/01/2014").to_s
# => "2014-01-01T00:00:00+00:00"
DateTime.parse("01/01/2014 10:00").to_s
# => "2014-01-01T10:00:00+00:00"
DateTime.parse("01/01/2014 10:00:30").to_s
# => "2014-01-01T10:00:30+00:00"