Bre*_*eak 2 ruby datetime datetime-format
有没有办法解析格式为"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
Run Code Online (Sandbox Code Playgroud)
试图使用,DateTime.strptime("01/01/14 12:00", "%d/%m/%Y %H:%M:%S")但显然有一个错误,因为没有秒.
您可以使用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)>
Run Code Online (Sandbox Code Playgroud)