我想写一个方法,它将接受一个字符串并给我
- 如果字符串中提供了时间值,则为datetime值
- 如果字符串中只提供了日期,则为一天结束时的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