【发布时间】:2014-01-11 01:41:38
【问题描述】:
我有一些新闻事件通过 postgresql 日期时间列存储在数据库中。但是,我想查询事件发生的时间。像
Event.where("occurred_at < '11:00'")
如果这是一个 postgresql 时间列,您可以这样做。
为了增加额外的皱纹,我将整个应用程序的 Rails 时区设置为东部时间
config.time_zone = 'Eastern Time (US & Canada)'
因此,如果您尝试以某种方式提取数据库时间,则该时间将采用 UTC,因此在半年期间,时间比较将关闭 1 小时(因为夏令时)。
我唯一能想到的就是维护一个单独的“时间”类型的数据库列。
编辑和澄清
这个问题的棘手部分是由于夏令时,UTC 偏移量在半年中会发生变化。 Time.zone.parse("2013-01-01 10:00") 给出 2013 年 1 月 1 日 10:00 EST -05:00(即 15:00 UTC),而六个月后 Time.zone.parse("2013- 07-01 10:00") 给出了 2013 年 7 月 1 日 10:00 EDT -04:00(即 14:00 UTC)。所以你不能只查询时间而不知道日期。
【问题讨论】:
-
请参阅:stackoverflow.com/questions/4002958/…,了解 Rails 如何计算使用夏时制的地区的时区偏移量。
-
你想查询时间,不管它发生在哪一天?
-
是的,完全正确。不分昼夜
标签: ruby-on-rails ruby postgresql timezone activesupport