我刚刚找到rails Date格式的错误吗?

时间:2011-06-07 19:46:52

标签: ruby-on-rails date format

在试图解析约会时,我已经绞尽脑汁待了几个小时:

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?

3 个答案:

答案 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