Ruby String для преобразования даты - PullRequest
67 голосов
/ 30 августа 2010

Я столкнулся с проблемой в Ruby on Rails.Я хочу преобразовать строку формата Tue, 10 Aug 2010 01:20:19 -0400 (EDT) в объект даты.

Есть ли в любом случае, я мог бы сделать это.

Вот то, что я посмотрел и попробовал в следующем сне повезло:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Хронический анализатор
  3. Ruby: преобразовать строку в дату
  4. Анализ даты из текста с использованием Ruby

Пожалуйста, помогите мне с этим.

Ответы [ 4 ]

126 голосов
/ 30 августа 2010

Что не так с методом Date.parse?

str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
date = Date.parse str
=> #<Date: 4910837/2,0,2299161>
puts date
2010-08-10

Кажется, работает.

Единственная проблема здесь - это часовой пояс. Если вам нужна дата в часовом поясе UTC, тогда лучше использовать объект Time, предположим, что у нас есть строка:

str = "Tue, 10 Aug 2010 01:20:19 +0400"
puts Date.parse str
2010-08-10
puts Date.parse(Time.parse(str).utc.to_s)
2010-08-09

Я не смог найти более простой способ преобразования Time в Date.

13 голосов
/ 30 августа 2010
Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")

Должно быть:

Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z')
8 голосов
/ 01 мая 2015
str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)"
str.to_date
=> Tue, 10 Aug 2010
1 голос
/ 05 мая 2016

Можно попробовать https://rubygems.org/gems/dates_from_string:

Найти дату в структуре:

text = "get car from repair 2015-02-02 23:00:10"
dates_from_string = DatesFromString.new
dates_from_string.find_date(text)

=> ["2015-02-02 23:00:10"]
...