DateTime.strptime не может разобрать строку даты

Я не понимаю, почему следующий код Ruby 2.4 не работает:

irb(main):006:0> require 'date'
=> false
irb(main):007:0> fmt = "%-m/%-d/%Y %-l:%M:%S %p"
=> "%-m/%-d/%Y %-l:%M:%S %p"
irb(main):008:0> DateTime.now.strftime(fmt)
=> "1/30/2018 7:42:44 AM"
irb(main):009:0> DateTime.strptime("1/30/2018 7:42:44 AM", fmt)
ArgumentError: invalid date
  from (irb):9:in `strptime'
  from (irb):9
  from /usr/local/bin/irb:11:in `<main>'
irb(main):010:0>

Формат даты и времени работает, когда я форматирую дату, но та же строка формата не работает, когда я пытаюсь проанализировать строку даты в этом формате.

2 ответа

Решение

Это потому что strptime не поддерживает флаги в формате, который вы используете, посмотрите http://ruby-doc.org/stdlib-2.4.2/libdoc/date/rdoc/DateTime.html

Ошибка в том, что формат fmt Вы предоставили не соответствует DateTime строка, которую вы предоставили.

Измените свой формат с

fmt = "%-m/%-d/%Y %-l:%M:%S %p"

в

fmt = "%m/%d/%Y %l:%M:%S %p"

Надеюсь это поможет.

Другие вопросы по тегам