首页 > 解决方案 > DateTime#strptime 返回无效日期错误

问题描述

我有一个从Daunt Books刮下来的字符串:

"Monday 2 December 6.30pm"

但我似乎无法将其转换为 DateTime DateTime#strptime。日期部分似乎有效:

(byebug) DateTime.strptime(str,"%A %d %B")
#<DateTime: 2019-12-02T00:00:00+00:00 ((2458820j,0s,0n),+0s,2299161j)>

但时间返回错误:

(byebug) DateTime.strptime(str,"%A %d %B %l.%M%P")
*** ArgumentError Exception: invalid date

nil

我知道这是正确的#strptime代码,因为如果它不是从网页上抓取的,它就可以在字符串上工作。我无法弄清楚我需要做什么才能使字符串有效#strptime工作。

编辑:

不幸的是,我正在抓取的网站在 OP 之后的第二天重新设计,抓取代码现在已经失效。

标签: rubystringdatetimestrptime

解决方案


我无法复制问题:

require 'date'

str = "Monday 2 December 6.30pm"
DateTime.strptime(str,"%A %d %B %l.%M%P") 
# => #<DateTime: 2019-12-02T18:30:00+00:00 ((2458820j,66600s,0n),+0s,2299161j)>

这对我有用:

require 'date'

foo = "Monday 2 December 6.30pm"

bar = DateTime.strptime(foo, '%a %d %B %l.%M%p')
bar.to_s
# => "2019-12-02T18:30:00+00:00"

和:

DateTime.strptime(foo, '%a %d %B %l.%M%p').strftime('%A %e %B %l:%M%p') 
# => "Monday  2 December  6:30PM"

推荐阅读