Django没有在db中存储确切的UTC时间

Posted

技术标签:

【中文标题】Django没有在db中存储确切的UTC时间【英文标题】:Django not storing the exact UTC time in db 【发布时间】:2018-01-25 01:47:03 【问题描述】:

我有一个 Django API/PostgreSql 项目,我尝试以 UTC 格式存储日期时间,稍后我将在前端使用 angular 转换为正确的时区。

我目前的设置是:

USE_TZ = True
TIME_ZONE = 'US/Eastern'

我第一次使用 UTC,但由于某种原因,日期时间存储为 +1 小时,所以我将时区设置为我的服务器时区

型号:

date = models.DateTimeField(default = timezone.now())

但是当我检索插入的记录时,时间还是晚了-3分钟。

当我使用下面的代码时,它会存储正确的时间:

date = models.DateTimeField(auto_now_add=True)

我在配置中遗漏了什么吗?我应该在哪个 TIME_ZONE 使用,服务器位置 time_zone,或者它与服务器时间有关 设置?

【问题讨论】:

你的服务器的时间是否减少了 3 分钟? date = models.DateTimeField(default = timezone.now()) default=timezone.now(注意缺少括号)。 Django datetime issues (default=datetime.now())的可能重复 【参考方案1】:

问题已解决,我不知道为什么,但是当我使用时:

date = models.DateTimeField(default = timezone.now()) # note: .now() with parenthesizes

时间卡住了,在服务器启动的时候。

修复使用:

date = models.DateTimeField(default = timezone.now) # without ()

我在 Django 1.6.5

【讨论】:

您的答案在参考文献中重复 ;-)。

以上是关于Django没有在db中存储确切的UTC时间的主要内容,如果未能解决你的问题,请参考以下文章

查询 Django 模型时,如何将 Django 中的 DateTimeField 从 UTC 转换为最终用户的时区(通常是 PST)?

如何在 python 和 django 中使用 Pytz 根据给定的 UTC 偏移量转换数据和时间?

如何确保保存在数据库中的UTC日期等于Django中指定时区的午夜[重复]

关于django的时区设置

如何让“分钟前”显示张贴时间而不是 UTC 时间? [关闭]

带有 UTC 支持/时区问题的 Django 开放时间