4

我希望我的报告在我的数据库使用 UTC 时以 CST 显示。为此,我需要能够按时间列分组并让数据库进行时区转换。

这适用于我的开发 postgresql 框:

    offset = -5
    result = ActiveRecord::Base.connection.execute("select  date(srl.created_at AT TIME
    ZONE '#{offset.to_s}') AS date, count(*) from server_request_logs srl where     
    srl.created_at between '#{@from.to_s(:db)}' and '#{@to.to_s(:db)}' group by 
    date(srl.created_at AT TIME ZONE '#{offset.to_s}')")

在 heroku 上,它出现以下错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  time zone "-5" not recognized

它也不适用于诸如“America/Winnipeg”之类的 TZInfo 名称或来自http://www.postgresql.org/docs/7.2/static/timezones.html的“CST”等受支持的时区

有没有人能让这个工作?

4

1 回答 1

1

首先,确保将时间戳列和变量定义为TIMESTAMP WITH TIME ZONE(或timestamptz简称)。在 PostgreSQL 中,这实际上不会导致保存任何时间戳;但使其成为一个固定的时间点,以 UTC 存储。您可以AT TIME ZONE使用干净的语义查看您选择的内容。 TIMESTAMP WITHOUT TIME ZONE(如果你只是说,这就是你得到的TIMESTAMP不是一个固定的时间点,直到它针对时区解决,因此更难使用。

您引用的有关时区的文档页面来自一个非常旧的 PostgreSQL 版本,该版本已不再受支持。也许这个页面会对你有更多帮助:

http://www.postgresql.org/docs/current/interactive/datetime-config-files.html

于 2012-04-23T03:58:18.950 回答