0

我正在从 Rails 3.2 中的 CSV 导入数据并将其保存到 mongodb 集合中,除日期字段外一切正常。导入的日期格式为 DD/MM/YYY。请问如何将导入的日期转换为 YYYY-MM-DD?

谢谢

4

2 回答 2

3

您可以像这样使用日期解析:

Date.strptime('01/02/2003', '%d/%m/%Y').to_s    #=> "2003-02-01"
  • Date.strptimeDate从给定格式的字符串创建对象

  • Date#to_s以 ISO 8601 格式返回它(即 YYYY-MM-DD)

但这取决于你的 CSV 有多大——这会创建一堆中间Date对象,这些对象会比(有点难看的)字符串索引方法慢一点:

def reformat_date(date)
  "#{date[6..9]}-#{date[3..4]}-#{date[0..1]}"
end

reformat_date('01/02/2003')     #=> "2003-02-01"

更新

我很好奇,所以我运行了一些快速基准测试——日期解析方法比字符串方法慢大约 2.7 倍(5.289 秒对 1.981 秒进行一百万次转换,Ruby 1.9.3/Windows)。YMMV。

于 2012-10-09T23:04:23.023 回答
1

你可能需要

require 'date'

然后使用以下语句解析日期:

d = Date.strptime('09/10/2012', '%d/%m/%Y')

使用以下示例将返回正确的格式:

d.year #=> 2012
d.mon  #=> 10
d.day  #=> 9
d.strftime('%Y/%m/%d')  #=> "2012/10/09"

然后将其保存到数据库中。不过,我对 mongodb 并不熟悉,但我相信你知道该怎么做。

有关日期解析的更多信息,您应该访问http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html

于 2012-10-09T23:08:42.657 回答