2012-10-25 90 views
0

我需要一种可靠的方法将格式化的日期字符串转换为日期时间对象,以便我可以保存到数据库中。我从一个RSS提要导入数据,日期字符串看起来像这样10/31/2012 11:59:00 PM,但每隔一段时间就会有一个没有时间数据,如下所示:9/24/2012。有没有办法将字符串转换为日期时间对象,无论时间是否存在?将2种类型的日期字符串转换为日期时间对象

我正在使用Date.strptime(),因为Date.parse()对我来说不够可靠。这是我正在使用的,当它遇到没有时间的日期字符串时会出错。

Date.strptime(i.xpath('activedate').text, '%m/%d/%Y %I:%M:%S %p').to_datetime 

什么是最好的处理方法?

回答

4

我建议chronic

require 'chronic' 

Chronic.parse '10/31/2012 11:59:00 PM' 
#=> 2012-10-31 23:59:00 0800 
Chronic.parse '9/24/2012' 
#=> 2012-09-24 12:00:00 0800 
+0

这完美地工作!感谢分享。 – Ken

1

,我正通过可能的日期格式的数组循环,并尝试解析,直到一个成功:

parsed_date = nil 

['%m/%d/%Y %I:%M:%S %p', '%m/%d/%Y'].each do |format| 
    parsed_date ||= DateTime.strptime(i.xpath('activedate').text, format) rescue nil 
end 
相关问题