【问题标题】:Django does not save timestamp in UTC inside database (Postgres)Django 不在数据库内的 UTC 中保存时间戳(Postgres)
【发布时间】:2014-05-25 14:20:17
【问题描述】:

在 settings.py 我有:

USE_TZ = True
TIME_ZONE = 'UTC' 

在model.py中:

class Game(models.Model):
    id = models.AutoField(primary_key=True)
    creation_timestamp = models.DateTimeField(default=lambda: timezone.localtime(timezone.now()))

本地时间是根据使用中间件的用户时区设置的,在这种情况下是“欧洲/罗马”(所以 +0200)。

当我使用 Django admin 创建一个新的游戏实例时,在页面内显示的表单输入中,creation_timestamp 自动设置为2014-04-11 12:46:59+02,但是当我保存时 它和我检查我得到2014-04-11 12:46:59+02 的数据库,这不是我所期望的,因为根据文档,Django 应该在保存之前将所有时间戳转换为UTC。 (我使用 pgAdmin,而不是 Django admin 检查数据库数据)。

我错了吗?

【问题讨论】:

    标签: django postgresql timezone models


    【解决方案1】:

    您可以将 PostgreSQL 客户端参数时区设置为 UTC。 或者在 postgresql.conf 中设置,然后重新加载或发送 SIGHUP 信号给 postmaster pid。 时区使用 exp:

    digoal=# set timezone='UTC';
    SET
    digoal=# select now();
                  now              
    -------------------------------
     2014-04-11 13:53:12.903336+00
    (1 row)
    
    digoal=# set timezone='PRC';
    SET
    digoal=# select now();
                  now              
    -------------------------------
     2014-04-11 21:53:24.239343+08
    (1 row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2016-08-24
      • 2014-06-11
      • 2020-01-14
      • 1970-01-01
      • 2019-02-01
      • 2015-04-14
      相关资源
      最近更新 更多