Парсинг дат к направляющие дружественный формат

У меня есть пакет приблизительно одного 100k, записывает это, я импортирую к приложению для направляющих.

Существует дата в каждой строке, отформатированной как следующее: 03/17/81

Однако, когда я пытаюсь просто присвоить его полю даты, это преобразовывается следующим образом:

ruby-1.8.7-p174 > "03/17/81".to_date
 => Sat, 17 Mar 0081 

В конечном счете я хотел бы, чтобы формат привел к 1981-03-17

Это было бы лучше всего сделано на импорте, или я должен быть переопределяющим в своей конфигурации направляющих для устанавливания нормы даты к формату, в котором я нуждаюсь и каков правильный подход в направляющих 2.3.5?

9
задан mwilliams 25 February 2010 в 21:28
поделиться

4 ответа

Используйте

d = Date.strptime("03/17/81", "%m/%d/%y")

Чтобы получить его в 1981-03-17, используйте:

d.to_s

См. Date Rubydoc .

19
ответ дан 4 December 2019 в 09:12
поделиться

Не меняйте Rails, измените свой код. Я не вижу никаких проблем в создании метода, преобразующего строку в подходящую дату.

string = "03/17/81"
date   = if string =~ %r{(\d+)/(\d+)/(\d+)}
  Date.parse("19#{$3}-#{$1}-#{$2}")
else
  nil # failover
end
0
ответ дан 4 December 2019 в 09:12
поделиться

Правильный способ сделать это, если вы собираетесь повторно использовать формат в нескольких местах, заключается в следующем: 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"
3
ответ дан 4 December 2019 в 09:12
поделиться

Попробуйте Chronic (gem install chronic):

require 'rubygems'
require 'chronic'
puts Chronic.parse "03/17/81"
#=> Tue Mar 17 12:00:00 -0800 1981

Возвращает объект Time.

1
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: