我的日期为字符串格式:23 Nov. 2014
。当然,使用这样的表达式将此字符串转换为日期很容易:
Date.strptime(my_string, '%d %b. %Y')
但是月份是五月时有一个问题 - 没有点,例如23 May 2014
。我的表情破裂了。
有人可以帮忙解决这个问题吗?如何为我的案件制作普遍表达?
答案 0 :(得分:3)
从my_string
和日期模式中删除句点。
Date.strptime(my_string.sub('.', ''), '%d %b %Y')
假设您在my_string
中最多只有一个点。如果可能有多个,请使用gsub
。
Date.strptime(my_string.gsub('.', ''), '%d %b %Y')
答案 1 :(得分:2)
我认为你使用的是错误的方法。 Date#parse应该使用几乎“任何东西”(请参阅TinMan回答和评论以澄清何时不使用解析)并提供相同的对象:
p Date.parse('23 Nov 2014') #=> #<Date: 2014-11-23 ((2456985j,0s,0n),+0s,2299161j)>
p Date.parse('23 Nov. 2014') #=> #<Date: 2014-11-23 ((2456985j,0s,0n),+0s,2299161j)> same object as with the previous line
答案 2 :(得分:0)
parse
方法尝试查找匹配的日期或日期时间格式,然后解析字符串以返回用于创建新Date或DateTime的值。它支持许多不同的格式,这很方便,但扫描查找匹配的过程会减慢解析时间。
此外,一些常用的格式不一定“适合”。考虑一下这里发生了什么:
Date.parse '31/01/2001'
=> #<Date: 2001-01-31 ((2451941j,0s,0n),+0s,2299161j)>
解析'%d/%m/%Y'
(日,月,年)格式的日期字符串,但在美国并不常见,因为Ruby不是以美国为中心的语言。反转前两个字段会导致:
Date.parse '01/31/2001'
ArgumentError: invalid date
from (irb):4:in `parse'
from (irb):4
from /Users/greg/.rbenv/versions/2.1.5/bin/irb:11:in `<main>'
irb(main):005:0> Date.parse '31/01/2001'