【问题标题】:Django: "auto_now_add=True" giving incorrect timeDjango:“auto_now_add=True”给出的时间不正确
【发布时间】:2018-10-26 17:55:00
【问题描述】:

我希望在我的 Django 数据库中创建记录时自动记录当前时间。

在我使用的模型中:

dateTime = models.DateTimeField(auto_now_add=True)

据我了解,考虑到正确的时区,这会自动标记时间。 但是,这会输出比我当地时间早 5 小时的时间。

所以为了尝试调试它,我在视图中运行了这个函数并打印了输出:

from django.utils import timezone
timeNow =  timezone.localtime(timezone.now())

timeNow 会输出正确的时间。

所以我将模型更改为:

def get_time():
    return timezone.localtime(timezone.now())

dateTime = models.DateTimeField(default = get_time)

这仍然会导致相同的错误时间戳。

我还在我的 settings.py 中更改了时区

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Canada/Central'

USE_I18N = True

USE_L10N = True

USE_TZ = True

任何想法我缺少什么?

【问题讨论】:

  • 日期时间在存储时从连接的时区转换为 UTC,然后在检索时转换回连接的时区。

标签: django timezone


【解决方案1】:

据我了解,考虑到正确的时区,这会自动标记时间。

这是个误会。见timezone documentation的第一句:

启用对时区的支持后,Django 以 UTC 格式将日期时间信息存储在数据库中,在内部使用时区感知的日期时间对象,并将它们转换为模板中的最终用户的时区和表格。

如您所见,然后可以将 UTC 日期时间转换为您想要显示的任何内容,等等。

【讨论】:

    【解决方案2】:

    **在模型中导入日期时间

    在 settings.py 中将 USE_TZ 更改为 False**

    LANGUAGE_CODE = 'zh-cn'

    TIME_ZONE = 'UTC'

    USE_I18N = 真

    USE_L10N = 真

    USE_TZ = 假

    【讨论】:

      【解决方案3】:

      在settings.py文件中

      将 USE_TZ 值保持为 False

      USE_TZ = 假

      这对我有用。

      【讨论】:

      • 不要这样做。请参阅此处的第一项:docs.djangoproject.com/en/3.0/topics/i18n/timezones/#faq。总结一下: 问:我不需要多个时区。我应该启用时区支持吗?答:是的。启用时区支持后,Django 使用更准确的本地时间模型。这可以保护您免受夏令时 (DST) 转换相关的微妙且不可重现的错误。
      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 2015-10-19
      • 2020-10-20
      • 1970-01-01
      • 2012-11-22
      • 2011-08-19
      • 2021-04-20
      • 2010-12-16
      相关资源
      最近更新 更多