【问题标题】:Django: Store gmt time in database table instead of local timeDjango:将gmt时间存储在数据库表中而不是本地时间
【发布时间】:2017-08-31 03:34:03
【问题描述】:

在我的客户模型中,我有两个日期时间字段用于存储创建时间和更新时间。

datetime_created = models.DateTimeField(auto_now_add=True)
datetime_updated = models.DateTimeField(auto_now=True)

当我创建一个客户时,它现在将本地时间存储在数据库中,当我通过 API 获取此客户数据时,它以 gmt 时间返回日期时间。这可以。但我想将 gmt 时间保存在数据库中。我认为将本地时间存储在数据库中并不是一个好习惯。

settings.py 文件中的日期设置是

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

我已经安装了“pip install pytz”模块,我的数据库是postgresql。

【问题讨论】:

  • 当然这是一个很好的做法,保存在 UTC 中。我建议您将日期时间保存为 UTC,并在您的视图中使用 pytz 或在模板中使用 tz 标签将其转换为您的方便

标签: python django postgresql django-rest-framework django-timezone


【解决方案1】:

您说得对,最佳做法是将您的日期时间字段保存为 UTC,并使用pytz 在您的视图中或使用tz 标签将其转换为您的方便。

IE,您可以使用 pytz 将您的日期时间转换为视图中的特定日期时间

import pytz

datetime_with_new_tz = object.created_at.astimezone(pytz.timezone(YOUR_LOCAL_TIMEZONE))`

如果要在模板中转换时区,可以使用tz

{% load tz %}
{{object.created_at|timezone:YOUR_LOCAL_TIMEZONE}}

【讨论】:

    【解决方案2】:

    最佳做法是以 UTC 格式保存。

    USE_TZ = True 在您的设置中,Django 将日期和时间信息以 UTC 格式存储在数据库中,否则它将存储天真的日期时间

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2017-04-15
      • 2019-03-22
      • 1970-01-01
      • 2020-10-10
      • 2013-10-29
      • 2012-05-15
      相关资源
      最近更新 更多