【发布时间】:2015-07-22 01:30:03
【问题描述】:
我正在尝试按日期比较行。首先,我使用字符串日期保存数据,如下所示:
2/10/15 23:37
进入我的 PostgreSQL 数据库。
我可以看到我的日期已保存,现在看起来像这样:2015-02-10 23:37:00,并且区域设置字段设置为 lc_collate = en_US.UTF-8。
现在我使用的是同一个文件,我想比较日期字段,看看它是否相同(应该是!),但 Ruby 将 2/10/15 23:37 读取为 0002-10-15 13:01:00 +0800。
我也在尝试这个:
Date.strptime(myDate, "%m/%d/%Y")
但结果是0015-02-12。
如何强制 Ruby 以与我的数据库相同的方式读取我的输入字符串?我试图在我的 application.rb 中设置 config.i18n.default_locale = 'en-US' 但它没有帮助。
【问题讨论】:
-
日期解析是我知道的“最有可能导致错误”的最高候选之一。在美国,日期通常是 MM/DD/YY(YY) 格式,但世界其他地区使用 DD/MM/YY(YY)。您必须非常小心,不要以任何一种方式解析日期,除非您非常确定它来自哪里。如果实际的日期值被解析为月份并且大于 12,则月份可能超出范围,从而导致异常。当日值在月份范围内但日和月被调换时,情况会更糟。也没有办法防止这个问题,你必须知道数据。
标签: ruby-on-rails ruby postgresql date datetime