匹配日期格式:" 2017年1月17日上午10:30"在Ruby中

时间:2017-01-17 18:19:29

标签: ruby date datetime

我一直在尝试使用Date / DateTime来验证给定日期的格式是否正确。

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

但是我收到了错误

`strptime': invalid date (ArgumentError)

我已经能够将字符串拆分为"" 1月17日," " 2017年10:30 AM"并且没有问题地验证它,但我真的想知道为什么我不能在整个字符串上使用strptime,或者如果可以的话我做错了。

2 个答案:

答案 0 :(得分:3)

发生此错误是因为根据DateTime#strptime的文档:

  

使用给定模板解析日期和时间的给定表示,并创建日期对象。与strftime不同,strptime不支持标志和宽度的规范。

您的格式包含值%-d,这是一个宽度参数,因此是例外。如果您尝试基本调用,如:

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

你会发现它有效。此外,您将要求完整的4位数年份使用大写字母Y.

简而言之:您需要调整格式字符串

答案 1 :(得分:0)

此格式可以正常使用:

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