确定日期/时间字符串中是否存在时间值



我想写一个方法,它将接受一个字符串并给我

  1. 如果字符串中提供了时间值,则为datetime值
  2. 如果字符串中只提供了日期,则为一天结束时的datetime值

我可以使用[to_datetime][1]来转换字符串,但我看不出是否提供了时间值,因为如果没有提供值,返回的DateTime将初始化为00:00:00 +0000

现在这是一个问题,因为当我解析输入时,to_datetime会给我一个默认值。

"1-1-2012".to_datetime            # => Sun, 01 Jan 2012 00:00:00 +0000
"01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000

我是不是错过了什么?有没有更好的方法来转换输入,以便我知道是否提供了时间值?

Ahh想明白了。我可以使用parse获取碎片(_p(:

DateTime._parse(date_only)
{:year=>2012, :mon=>1, :mday=>1}
DateTime._parse(date_and_time)
{:hour=>23, :min=>59, :sec=>59, :year=>2012, :mon=>1, :mday=>1}

首先用正则表达式确定您所处的情况,然后我只添加1天减去1秒。

my_date_time = "1-1-2012".to_datetime + 1.days - 1.seconds

这可能会对您有所帮助:

date = '10/10/2000'
result = begin
DateTime.strptime(date, '%d/%m/%Y %H:%M:%S')
rescue ArgumentError => e
DateTime.strptime(date, '%d/%m/%Y').at_end_of_day
end

最新更新