Django 自动将日期时间字符串转换为本地时区

Posted

技术标签:

【中文标题】Django 自动将日期时间字符串转换为本地时区【英文标题】:Django automatically converting datetime string to local timezone 【发布时间】:2018-05-25 18:09:12 【问题描述】:

我在我的有效负载中添加时间戳并将其存储在数据库中的每条记录。

假设我的有效载荷的一部分是"content":["timestamp":"2017-12-12 08:05:30"]

这就是我的处理方式。

content['timestamp'] = parser.parse(content['timestamp'],dayfirst=True)

我的模型的时间戳字段为:

timestamp = models.DateTimeField(null=True)

当我签入我的数据库时,它会将时间戳字段存储为:

2017-12-12 13:35:30

应按我的要求按原样存储。 2017-12-12 08:05:30

即它存储时间戳字段 + 我的本地时区(+5:30)小时。

我希望它按原样存储时间戳字段。

我尝试了其他帖子,他们建议使用del os.environ['TZ']

知道我可能做了什么导致了这种情况,或者我可以做些什么来避免这种情况。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

你可以在settings.py中设置时区

以下是有效时区列表:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

你可以使用

TIME_ZONE = '亚洲/加尔各答'

对于 UTC+05:30

来自Selcuk Answer的参考

【讨论】:

是的,我们可以,我已将其设置为 UTC。在这里我不想使用时区,而是按原样存储。【参考方案2】:

所以根据这个问题,问题是当 django 将 datetime 转换为数据库中的 postgres timestamptz 时。

Postgres prevent timestamp with timezone conversion

所以我需要在 PostgreSQL 中有时间戳字段

为此,我需要使用此问题中发布的答案。

Can we have django DatetimeField without timezone?

我需要在设置中指定 USE_TZ = False。

这可以确保在迁移 PostgreSQL 时考虑将 datetimefield 转换为 timestamp 而不是 timestamptz 。

【讨论】:

以上是关于Django 自动将日期时间字符串转换为本地时区的主要内容,如果未能解决你的问题,请参考以下文章

Python 字符串到 Django 时区(知道日期时间)

将 UTC 日期时间字符串转换为本地日期时间

将 UTC 日期时间全局转换为用户指定的本地日期时间

js 如何把一个本地时间 转换为其他时区的时间

将 UTC 日期格式转换为本地 nsdate

将 GMT 日期时间转换为本地时区日期时间