0

当我运行时:

psql great_dev -c 'show timezone'

返回以下内容:

TimeZone  
------------
US/Eastern
(1 row)

我希望时区是 EST,所以我认为这是正确的。问题是,每当我运行某种数据库操作(IE update_attributes、save 等)时,时间戳都采用 UTC 格式,如下所示:

SQL (0.6ms)  UPDATE "schedules" SET "accepted" = $1, "updated_at" = $2 WHERE 
 "schedules"."id" = 46  [["accepted", "only_freelancer"], 
 ["updated_at", Mon, 02 Dec 2013 16:51:07 UTC +00:00]]

我开始实施几个后台作业,我必须了解 Postgres 所在的时区。

  1. Postgres 在 EST 还是 UST?
  2. 如果它在 UST,我如何将其转换为 EST,这样做是否危险?
  3. 我将允许用户从选择菜单中输入时间戳 - 菜单应该列出 UTC 时间还是 EST 时间?
4

1 回答 1

0

Postgres 中的默认timestamp类型是timestamp without time zone.
为了解决这个问题,使用数据类型timestamp with time zone

或者在时区设置为 UTC 的情况下运行数据库并使用timestamp [without time zone]. 请注意,会话的时区设置与 Postgres 实际为您的查询返回的内容相关。

这个相关答案提供了您可能需要的所有详细信息:
在 Rails 和 PostgreSQL 中完全忽略时区

于 2013-12-02T17:55:54.113 回答