DateTime.strptime无法解析日期字符串

时间:2018-01-30 07:46:03

标签: ruby datetime datetime-parsing

我不明白为什么下面的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 个答案:

答案 0 :(得分:4)

因为strptime不支持您使用的格式的标记,请查看http://ruby-doc.org/stdlib-2.4.2/libdoc/date/rdoc/DateTime.html#method-c-strptime

答案 1 :(得分:2)

错误是因为您提供的格式fmt与您提供的DateTime字符串不匹配。

更改格式
fmt = "%-m/%-d/%Y %-l:%M:%S %p"

进入

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

希望这有帮助。