2017-01-17 2 views
0

Я пытаюсь использовать Date/DateTime, чтобы подтвердить, что заданная дата находится в правильном формате.Соответствие Дата отформатирована: «17 января 2017 года 10:30 утра» в Ruby

str = "January 17, 2017 10:30 AM" 
temp = DateTime.strptime(str, '%B %-d, %y %l:%M %p') 

, но я получаю ошибку

`strptime': invalid date (ArgumentError) 

я смог разбить строку в «» 17 января «,„2017 10:30 AM“и проверить его без проблем, но я бы очень хотелось бы знать, почему я не могу просто использовать strptime на всю строку, или то, что я делаю неправильно, если это может быть сделано

+0

Вы можете использовать 'DateTime.parse', если строка не должна быть в этот точный формат, т. е. разрешить форматирование допустимых строк даты по-разному. – cobaltsoda

+0

Справедливости ради следует отметить, что у Коди был задокументированный письменный ответ за несколько секунд до меня. –

ответ

0

Этот формат работает отлично:

temp = DateTime.strptime(str, '%B %d, %Y %l:%M %p') 
#<DateTime: 2017-01-17T10:30:00+00:00 ((2457771j,37800s,0n),+0s,2299161j)> 
+0

Единственная разница:% d вместо ‰ -d? – kouty

+1

И Y для четырехзначного года –

3

Эта ошибка происходит потому, что в соответствии с Документами по DateTime#strptime:.

Проводит заданное представление даты и времени с заданным шаблоном и создает объект даты. strptime не поддерживает спецификацию флагов и ширины в отличие от strftime.

И ваш формат включает в себя значение %-d, которое является параметром ширины и, следовательно, исключение. Если вы попытаетесь основной вызов, как:

DateTime.strptime(str, '%B %d, %Y')

вы увидите, что она работает. Кроме того, вам понадобится заглавный-Y для полного 4-значного года.

В двух словах: вам нужно настроить ваш форматной строки

Смежные вопросы