我需要一种可靠的方法将格式化的日期字符串转换为datetime对象,这样我就可以保存到数据库中。我正在从RSS源导入数据,日期字符串看起来像10/31/2012 11:59:00 PM
,但每隔一段时间就会没有时间数据,如下所示:9/24/2012
。有没有办法将字符串转换为日期时间对象,无论时间是否存在?
我使用的是Date.strptime()
,因为Date.parse()
对我来说不够可靠。这就是我正在使用的内容,当它遇到没有时间的日期字符串时会出错。
Date.strptime(i.xpath('activedate').text, '%m/%d/%Y %I:%M:%S %p').to_datetime
处理此问题的最佳方法是什么?
答案 0 :(得分: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
答案 1 :(得分: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