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

Ruby 1.87 против 1.92 Date.parse

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

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

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

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

Любые идеи?

4b9b3361

Ответ 1

Используйте 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.

Ответ 2

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

Сам формат

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

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

Ответ 3

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

Ответ 4

Мне нравится american_date gem для выполнения этого...

Ответ 5

  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