将2种类型的日期字符串转换为datetime对象

时间:2012-10-25 06:39:56

标签: ruby-on-rails ruby

我需要一种可靠的方法将格式化的日期字符串转换为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

处理此问题的最佳方法是什么?

2 个答案:

答案 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