0

我需要一种可靠的方法将格式化的日期字符串转换为日期时间对象,以便可以保存到数据库中。我正在从 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

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

4

2 回答 2

4

我推荐慢性

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
于 2012-10-25T07:17:55.103 回答
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
于 2012-10-25T07:14:35.033 回答