我一直在尝试使用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,或者如果可以的话我做错了。
答案 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)>