Рубин 1.87 против 1.92 Дата.парс - PullRequest
47 голосов
/ 21 марта 2011

В Ruby 1.87 я мог сделать:

Date.parse ("3/21/2011")

Теперь в 1.9.2 я получаю:

ArgumentError: недопустимая дата

Любойидеи?

Ответы [ 5 ]

60 голосов
/ 21 марта 2011

Используйте strptime и укажите конкретный формат времени.

ruby-1.9.2-p136 :022 > Date.strptime '03/21/2011', '%m/%d/%Y'
 => #<Date: 2011-03-21 (4911283/2,0,2299161)>

См. Ответ michaelmichael о причине этой разницы междуВерсии Ruby.

26 голосов
/ 21 марта 2011

За этот отчет об ошибке , возможность разбора mm/dd/yy дат была намеренно удалена в 1.9. Создатель Ruby Юкихиро Мацумото говорит:

Сам формат "дд / дд / дд" очень культура зависима и неоднозначна. Это это гг / мм / дд в Японии (и другие страны), мм / дд / гг в США, дд / мм / гг в европейских странах, верно? В некоторых случаи, вы можете сказать им случайно, но мы не должны полагаться на удачу в общие случаи. Я считаю, что это причина разбора этот формат отключен в 1.9.

Как предполагает Хансенгель, вместо него можно использовать Date.strptime.

2 голосов
/ 13 сентября 2012

Мне нравится камень american_date за выполнение этого ...

2 голосов
/ 21 марта 2011

Мне всегда было трудно разбирать даты с Date.parse. Мое решение благодарно за chronic драгоценный камень . Мне также нравится функция strptime, найденная в другом ответе.

1 голос
/ 12 января 2012
  class << self
    def parse_with_us_format(date, *args)
      if date =~ %r{^\d+/\d+/(\d+)$}
        Date.strptime date, "%m/%d/#{$1.length == 4 || args.first == false ? '%Y' : '%y'}"
      else
        parse_without_us_format(date, *args)
      end
    end
    alias_method_chain :parse, :us_format
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...