每当我运行某种数据库操作(IE update_attributes,save等)时,时间戳都是UTC

时间:2013-12-02 17:27:39

标签: ruby-on-rails postgresql timezone timestamp timestamp-with-timezone

当我跑步时:

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. 是EST还是UST的Postgres?
  2. 如果是在UST,如何将其转换为EST,这样做是否危险?
  3. 我将允许用户从选择菜单输入时间戳 - 菜单列表是UTC时间还是EST时间?

1 个答案:

答案 0 :(得分:0)

Postgres中的默认timestamp类型为timestamp without time zone 要解决此问题,请使用数据类型 timestamp with time zone

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

此相关答案提供了您可能需要的所有详细信息:
Ignoring timezones altogether in Rails and PostgreSQL