我有一批 100k 左右的记录要导入到 Rails 应用程序中。
每行中都有一个日期,格式如下:03/17/81
但是,当我尝试将其分配给日期字段时,它会转换如下:
ruby-1.8.7-p174 > "03/17/81".to_date
=> Sat, 17 Mar 0081
最终我希望格式导致1981-03-17
这最好在导入时完成,还是应该在我的 Rails 配置中覆盖以将日期标准设置为我需要的格式以及 Rails 2.3.5 中的正确方法是什么?
我有一批 100k 左右的记录要导入到 Rails 应用程序中。
每行中都有一个日期,格式如下:03/17/81
但是,当我尝试将其分配给日期字段时,它会转换如下:
ruby-1.8.7-p174 > "03/17/81".to_date
=> Sat, 17 Mar 0081
最终我希望格式导致1981-03-17
这最好在导入时完成,还是应该在我的 Rails 配置中覆盖以将日期标准设置为我需要的格式以及 Rails 2.3.5 中的正确方法是什么?
如果您要在多个地方重用该格式,正确的方法是执行以下操作:http: //seanbehan.com/ruby-on-rails/custom-date-formats-for-your-rails -应用/
创建文件config/initializers/date_formats.rb
...包含这个:
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
:short_date => "%Y/%m/%d"
)
然后你应该看到:
ruby-1.8.7-p174 > date = "03/17/81".to_date
ruby-1.8.7-p174 > date.to_s(:short_date)
#=> "1981/03/17"
尝试慢性(宝石安装慢性):
require 'rubygems'
require 'chronic'
puts Chronic.parse "03/17/81"
#=> Tue Mar 17 12:00:00 -0800 1981
返回一个时间对象。
不要改变 Rails,改变你的代码。在创建将字符串转换为合适日期的方法时,我没有看到任何问题。
string = "03/17/81"
date = if string =~ %r{(\d+)/(\d+)/(\d+)}
Date.parse("19#{$3}-#{$1}-#{$2}")
else
nil # failover
end