在试图解析约会时,我已经绞尽脑汁待了几个小时:
Date.today.to_s
=> "06/07/2011"
Date.today
=> Tue, 07 Jun 2011
Date.parse Date.today.to_s
=> Wed, 06 Jul 2011
Date::DATE_FORMATS[:default]
=> "%m/%d/%Y"
to_s的默认格式与解析的默认格式不同?他们为什么要这样对我?
将Rails 3.0.5与Ruby 1.9.2-p180一起使用
更新 所以多亏了你的答案,我意识到DATE_FORMATS是一个rails事物,而Date.format正在使用ruby库(正确吗?)。有没有办法用默认的DATE_FORMAT解析日期/时间而不使用strptime?
答案 0 :(得分:5)
通常情况下,Date.today.to_s
会返回“2011-06-07”,但由于您设置了默认日期格式,因此使用的是“06/07/2011”。
Date.parse
可以轻松识别YYYY-MM-DD格式,但当它看到06/07/2011时,它认为真的是DD / MM / YYYY(不是MM / DD / YYYY,正如您所料 - 请记住,Date.parse
对您设置的Rails的默认日期格式一无所知。默认日期格式仅适用于Rails输出Date.to_s
)。
您可以强制它解析MM / DD / YYYY日期,如下所示:
Date.strptime(Date.today.to_s, "%m/%d/%Y")
# => Tue, 07 Jun 2011
答案 1 :(得分:0)
我猜想to_s方法使用locale option来确定如何写日期。
我不知道这是怎么回事。 Date.parse使用启发式方法来解析日期,所以有时会出错。
答案 2 :(得分:0)
Chronic gem(link)解决了几乎所有日期解析问题(是的,它们可能非常烦人)。
Chronic.parse("06/07/2011")
#=> 2011-06-07 12:00:00 +0000