Ruby中的DateTime字符串 - 如何使时间可选

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")但显然有一个错误,因为没有秒.

Aru*_*hit 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)>
Run Code Online (Sandbox Code Playgroud)