为什么DateTime.parse无法将此无效输入识别为无效日期?

时间:2017-01-23 13:10:35

标签: ruby datetime

任何人都可以解释为什么DateTime.parse会返回这个而不是失败,这是我在传递无效日期时所期望的行为吗?

require 'date'
DateTime.parse "X5pxmDwewKlIgJ_G0HX6TI2sMoY1XOgOcz09oQ4RO9U"
=> #<DateTime: 2017-01-09T00:00:00+00:00 ((2457763j,0s,0n),+0s,2299161j)>

我试图只留下数字,但后来它给了ArgumentError: invalid date,我也尝试修改了那个字符串,但是又失败了:

DateTime.parse "X5px4fGHewKlIgJ_G0635I2sMoY1XOgOcz09oQ4ROA1"
ArgumentError: invalid date

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

parse努力提取日期。您可以使用Date#_parse查看它找到的内容:

require 'date'
Date._parse 'X5pxmDwewKlIgJ_G0HX6TI2sMoY1XOgOcz09oQ4RO9U'
#=> {:hour=>0, :mday=>9}

:hour=>0归因于0H(H =小时)

Date._parse '0H'
#=> {:hour=>0}

:mday=>9是因为09

Date._parse '09'
#=> {:mday=>9}

答案 1 :(得分:1)

您可能想查看Chronic gem。它可以解析各种各样的模式。虽然肯定会有漏洞,但它会对你的字符串返回一个合理的响应:

[4] (pry) main: 0> Chronic.parse('X5pxmDwewKlIgJ_G0HX6TI2sMoY1XOgOcz09oQ4RO9U')
nil

看看&#34;用法&#34;和&#34;例子&#34;文档中的部分,以了解它可以做什么。令人印象深刻。