rails中的日期转换

时间:2012-10-09 22:48:49

标签: ruby-on-rails ruby-on-rails-3 mongodb

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

由于

2 个答案:

答案 0 :(得分:3)

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

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

  • 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.289s vs 1.981s,Ruby 1.9.3 / Windows)。 YMMV。

答案 1 :(得分: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