Подтвердить что ты не робот

Ruby Time.parse дает мне ошибку вне диапазона

Я использую Time.parse для создания объекта Time из строки.

По какой-то причине

Time.parse("05-14-2009 19:00")

вызывает аргумент нашей ошибки диапазона, тогда как

Time.parse("05-07-2009 19:00")

не

Любые идеи?

4b9b3361

Ответ 2

Если вам известен формат строки, используйте:

Time.strptime(date, format, now=self.now) {|year| ...}   

http://www.ruby-doc.org/core-1.9/classes/Time.html#M000266

Он решит вашу проблему и, вероятно, будет быстрее, чем Time.parse.

EDIT:

Похоже, что они взяли strptime из класса Time, но он все равно назывался Date.strptime. Если вы находитесь в Rails, вы можете сделать:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time

если вы используете чистый рубин, тогда вам нужно:

require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")

Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min], 
         d[:sec], d[:sec_fraction], d[:zone])

См. также: Проблемы с датой и временем в Ruby on Rails.

Ответ 3

Это из-за эвристики Time#parse.

И это связано с англо-американскими форматами.

С тире '-' он ожидает mm-dd-yyyy, с косой чертой '/' он ожидает dd/mm/yyyy.

Это поведение изменяется намеренно в 1.9. для выполнения стандартов eur, iso и jp.

Ответ 4

Вам, вероятно, не нужно это для решения этой проблемы, но я по-прежнему рекомендую проверить парсер времени и времени на естественном языке Chronic, он несколько раз спас мне много работы.

Ответ 5

Вероятно, ожидается формат Day-Month-Year, поэтому ваше первое значение пытается указать 5-й день 14-го месяца.