Ответ 1
Я предполагаю, что он ожидает, что вторая часть строки (14) будет месяцем.
Я использую Time.parse для создания объекта Time из строки.
По какой-то причине
Time.parse("05-14-2009 19:00")
вызывает аргумент нашей ошибки диапазона, тогда как
Time.parse("05-07-2009 19:00")
не
Любые идеи?
Я предполагаю, что он ожидает, что вторая часть строки (14) будет месяцем.
Если вам известен формат строки, используйте:
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.
Это из-за эвристики Time#parse
.
И это связано с англо-американскими форматами.
С тире '-' он ожидает mm-dd-yyyy, с косой чертой '/' он ожидает dd/mm/yyyy.
Это поведение изменяется намеренно в 1.9. для выполнения стандартов eur, iso и jp.
Вам, вероятно, не нужно это для решения этой проблемы, но я по-прежнему рекомендую проверить парсер времени и времени на естественном языке Chronic, он несколько раз спас мне много работы.
Вероятно, ожидается формат Day-Month-Year, поэтому ваше первое значение пытается указать 5-й день 14-го месяца.