如何在 Django 1.4 中存储一个简单的日期时间

Posted

技术标签:

【中文标题】如何在 Django 1.4 中存储一个简单的日期时间【英文标题】:How to store a naive datetime in Django 1.4 【发布时间】:2012-05-26 22:04:57 【问题描述】:

我有一个格式为“2012-05-19 19:13:00”的简单日期和时间,需要使用 Django 1.4 及其时区感知功能来存储它。

虽然无法知道日期最初所在的时区,但将其存储为 UTC 似乎是有意义的。

但是,使用 pytz 等,我不确定如何将没有时区的日期转换为 UTC 日期时间。

【问题讨论】:

【参考方案1】:

如果它没有 tzinfo,那么当然不能转换为 UTC。相反,您可以将 datetime 对象变成一个时区感知对象:

import datetime
from pytz import UTC

dt = datetime.datetime.now()  # just some date
tz_aware_dt = dt.replace(tzinfo=UTC)

编辑:

migration guide for django 1.4 使用它来完成上述操作:

>>> from django.utils.dateparse import parse_datetime
>>> naive = parse_datetime("2012-02-21 10:28:45")
>>> import pytz
>>> pytz.timezone("Europe/Helsinki").localize(naive)
datetime.datetime(2012, 2, 21, 10, 28, 45, tzinfo=<DstTzInfo 'Europe/Helsinki' EET+2:00:00 STD>)

您可能应该使用那个版本,将“UTC”替换为“Europe/Helsinki”。

【讨论】:

太棒了,谢谢。执行pytz.UTC.localize(naive) 似乎可以解决问题。

以上是关于如何在 Django 1.4 中存储一个简单的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在数据库中存储日期列表和当天听的歌曲?

如何在 DJango 的 DateTimeField 中添加默认时间(但不是日期)?

Django 1.4:如何忽略 loaddata 中的字段、模型

如何在 Django 模型中存储每个月的数据

Django - 在模板中呈现日期字段

将 CMS 2.3 与 Django 1.4 集成