Django:将gmt时间存储在数据库表而不是本地时间

时间:2017-04-05 13:24:06

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

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

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

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

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

{{1}}

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

2 个答案:

答案 0 :(得分:4)

最佳做法是将其保存为UTC格式。

在您的设置中

%JBOSS_HOME%\bin,Django将日期和时间信息以UTC格式存储在数据库中,否则它将存储天真的日期时间

答案 1 :(得分:0)

您是最严格的,最佳做法是在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}}