Разбор строки на дату в Ruby

Я знаю, что это звучит как повторяющийся вопрос, но я думаю, что эта ситуация отличается. Я удалю этот пост, если это действительно так.

У меня есть строка, содержащая дату в следующем формате: Чт, 20 июня.

Я хотел бы проанализировать это в переменной Date, а затем увеличить ее до следующего дня.

До сих пор я сделал

text = "Thu, Jun. 20"
date = Date.new
date = Date.strptime(text, '{%a, %m, %d}')

Но это дает мне следующую ошибку:

invalid date (ArgumentError)

Я получил эту идею от: Ruby: преобразовать строку в дату

Все ответы, которые я видел до сих пор, анализировали строки, содержащие полную информацию (полный месяц или день недели). Возможно ли то, что я пытаюсь сделать? Если бы не какие-либо предложения по обходному пути, мы были бы очень признательны.


person megan    schedule 20.06.2013    source источник
comment
вы ищете %a, %m, %d, но ваш формат %a, %m. %d   -  person ddavison    schedule 21.06.2013
comment
Вы пробовали просто Date.parse text?   -  person Marek Lipka    schedule 21.06.2013


Ответы (2)


Чтобы ответить на ваш вопрос, я хотел бы преобразовать это в переменную Date, а затем увеличить ее до следующего дня. Я попытался сделать следующее:

require 'date'

d = Date.parse("Thu, Jun. 20") 
# => #<Date: 2013-06-20 ((2456464j,0s,0n),+0s,2299161j)>
d.to_s # => "2013-06-20"
d.next.to_s # => "2013-06-21"
person Arup Rakshit    schedule 20.06.2013

Вы использовали неправильный формат даты. После анализа вы можете использовать оператор плюс или минус, чтобы изменить дату.

Ссылка: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-strftime

%a – сокращенное имя (``Sun'')

%b – сокращенное название месяца ("Ян").

%d — день месяца, дополненный нулями (01..31)

Код:

1.9.3p392 :003 > require 'date'
 => true 
1.9.3p392 :008 > date = Date.strptime(text, '%a, %b. %d')
 => #<Date: 2013-06-20 ((2456464j,0s,0n),+0s,2299161j)> 
1.9.3p392 :009 > date + 1
 => #<Date: 2013-06-21 ((2456465j,0s,0n),+0s,2299161j)> 
1.9.3p392 :010 > date - 1
 => #<Date: 2013-06-19 ((2456463j,0s,0n),+0s,2299161j)> 
person Ikhoon Eom    schedule 21.06.2013