如何在Ruby中将字符串转换为日期对象

6

我得到了一个字符串类型的日期,如下所示:

"September 1998"

我尝试过像Date.parse("September 1998")这样的方法,但它并不起作用。

如何将它转换为Ruby日期对象,以便返回与上述格式相同的字符串?


2
但是,“1998年9月”不是一个日期,缺少了天数。 - mu is too short
是的,但我只得到这样的结果。那么有没有办法将其转换为09-1998? - rubyist
在解析日期时,一定要指定格式,特别是当使用可能包含日和月的格式时。根据用户的语言环境强制执行格式,并确保在必要时消除日期歧义。 - aceofspades
3个回答

9

Date.strptime('September 1998', '%B %Y')。然而,这将代表1998年9月1日,因为日期对象表示日期。


4
你可以使用Chronic宝石
require 'chronic'

t = Chronic.parse('September 1998', :guess => true) #returns a Time object
=> 1998-09-01 00:00:00 -0700

t.to_date #convert to Date object
=> <Date: 1998-09-16 ((2451073j,0s,0n),+0s,2299161j)>

Chronic是由Tom Preston-Werner创建的,他还与他人共同创建了Github。


2
只需在前面添加缺失的“1 ”即可:
str ="September 1998"
p Date.parse("1 " + str) # => #<Date: 1998-09-01 ((2451058j,0s,0n),+0s,2299161j)>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接