You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django向PostgreSQL存储对象时如何使用UTC而非本地时区?

Django DateTimeField 时区存储问题

我在模型中定义了一个名为signed_up_on的字段,使用DateTimeField(auto_now_add=True)参数,希望该字段将时间戳以UTC时区而非本地EST时区存储到PostgreSQL数据库中。

模型简化代码

class TutorTest(models.Model):
    signed_up_on = models.DateTimeField(auto_now_add=True)

Settings.py 配置

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True

根据Django文档,当设置TIME_ZONE = 'UTC'且USE_TZ = True时,Django应该默认以UTC时区存储时间。但我查询PostgreSQL的时区时得到以下结果:

SHOW TIMEZONE;
  TimeZone
------------
 US/Eastern
(1 row)

我尝试在Django Shell中使用timezone.now()创建新模型实例,得到的时间是:

datetime.datetime(2022, 9, 21, 14, 36, 16, 670726, tzinfo=datetime.timezone.utc)

但数据库中实际存储的时间却是:

2022-09-21 10:35:26.633116-04

当时我猜测是数据库的问题,对此感到困惑。


编辑补充

后来我找到了原因:数据库会将Django传入的UTC时间转换为EST时区存储,但当我通过Django读取该时间时,它会自动转换回UTC时间返回,这完全符合我的需求。

内容的提问来源于stack exchange,提问作者jarjarbinks99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:00:51