В Ruby 1.87 я мог бы сделать:
Date.parse ("3/21/2011")
Теперь в 1.9.2 я получаю:
ArgumentError: недопустимая дата
Любые идеи?
В Ruby 1.87 я мог бы сделать:
Date.parse ("3/21/2011")
Теперь в 1.9.2 я получаю:
ArgumentError: недопустимая дата
Любые идеи?
Используйте 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.
Per этот отчет об ошибках, возможность разбора дат mm/dd/yy
была умышленно удалена в 1.9. Создатель Ruby, Юкихиро Мацумото говорит:
Сам формат"dd/dd/dd" культурно зависимой и неоднозначной. Это составляет yy/mm/dd в Японии (и другие страны), мм/дд/гг в США, дд/мм/гг в европейских странах, не так ли? В некоторых случаев, вы можете сказать им случайно, но мы не должны полагаться на удачу в общие случаи. Я считаю, что это разбор синтаксиса этого формата отключен в 1.9.
Как предлагает hansengel, вы можете использовать Date.strptime
вместо этого.
У меня всегда было трудно разобрать даты с помощью Date.parse
. Мое решение не жалеет chronic
gem. Мне также нравится функция strptime
, найденная в другом ответе.
Мне нравится american_date gem для выполнения этого...
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