我刚刚发现了 Rails 日期格式中的错误吗?

发布于 2024-11-14 11:36:09 字数 462 浏览 0 评论 0原文

在尝试解析日期时,我已经绞尽脑汁了几个小时:

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 ?

In trying to parse a date, I have been racking my brain for hours:

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" 

The default format for to_s is different than the default format for parsing? Why would they do this to me?

Using Rails 3.0.5 with Ruby 1.9.2-p180

UPDATE
So thanks to your answers, I realize that the DATE_FORMATS is a rails thing while Date.format is using the ruby library (correct?). Is there a way then to parse dates/times with the default DATE_FORMAT without using strptime?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

相权↑美人 2024-11-21 11:36:09

通常,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

Normally, Date.today.to_s would return "2011-06-07", but since you set a default date format, it's using "06/07/2011" instead.

Date.parse easily recognizes the YYYY-MM-DD format, but when it sees 06/07/2011 it thinks that's really DD/MM/YYYY (not MM/DD/YYYY as you're expecting -- keep in mind that Date.parse knows nothing about Rails' default date format you set. The default date format is only for Rails' outputting of Date.to_s).

You can force it to parse a MM/DD/YYYY date like this:

Date.strptime(Date.today.to_s, "%m/%d/%Y")
# => Tue, 07 Jun 2011
揽清风入怀 2024-11-21 11:36:09

我猜想 to_s 方法使用 区域设置选项 确定日期的书写方式。

但我不明白这是一个问题。 Date.parse 使用启发式方法来解析日期,因此有时会出错。

I would guess that the to_s method uses a locale option to determine how to write the date.

I dont see how this is an issue though. Date.parse uses heuristics to parse the date so sometimes it will get it wrong.

月隐月明月朦胧 2024-11-21 11:36:09

Chronic gem(链接)解决了几乎所有日期解析问题(是的,它们可能非常烦人)。

Chronic.parse("06/07/2011")
#=> 2011-06-07 12:00:00 +0000

The Chronic gem (link)solves pretty much all date parsing issues (and yes, they can be quite annoying).

Chronic.parse("06/07/2011")
#=> 2011-06-07 12:00:00 +0000
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文