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
相关产品推荐
相关产品推荐

