У меня есть пакет приблизительно одного 100k, записывает это, я импортирую к приложению для направляющих.
Существует дата в каждой строке, отформатированной как следующее: 03/17/81
Однако, когда я пытаюсь просто присвоить его полю даты, это преобразовывается следующим образом:
ruby-1.8.7-p174 > "03/17/81".to_date
=> Sat, 17 Mar 0081
В конечном счете я хотел бы, чтобы формат привел к 1981-03-17
Это было бы лучше всего сделано на импорте, или я должен быть переопределяющим в своей конфигурации направляющих для устанавливания нормы даты к формату, в котором я нуждаюсь и каков правильный подход в направляющих 2.3.5?
Используйте
d = Date.strptime("03/17/81", "%m/%d/%y")
Чтобы получить его в 1981-03-17, используйте:
d.to_s
См. Date Rubydoc .
Не меняйте Rails, измените свой код. Я не вижу никаких проблем в создании метода, преобразующего строку в подходящую дату.
string = "03/17/81"
date = if string =~ %r{(\d+)/(\d+)/(\d+)}
Date.parse("19#{$3}-#{$1}-#{$2}")
else
nil # failover
end
Правильный способ сделать это, если вы собираетесь повторно использовать формат в нескольких местах, заключается в следующем: http://seanbehan.com/ruby-on-rails/custom-date-formats-for-your-rails-application/
Создайте файл 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"
Попробуйте Chronic (gem install chronic):
require 'rubygems'
require 'chronic'
puts Chronic.parse "03/17/81"
#=> Tue Mar 17 12:00:00 -0800 1981
Возвращает объект Time.