Вопрос

Я использую 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.

РЕДАКТИРОВАТЬ:

Похоже, они взяли 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.

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

При использовании тире «-» ожидается мм-дд-гггг, при использовании косой черты «/» — дд/мм/гггг.

Такое поведение изменения намеренно в 1.9.для соблюдения стандартов дат EUR, ISO и JP.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top