Python-Django时区无法正常工作

时间:2015-10-21 00:00:36

标签: python django datetime timezone pytz

我正在开发基于Django的网站。我正在尝试获得正确的时区和时间来显示。但它不能正常工作。我住在德克萨斯州达拉斯市。所以我的默认时区是' America / Chicago'。

我的settings.py文件包含以下代码行。

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我有日期时间,并安装了pytz。因此,当我试图在数据库中节省时间时,我的代码是,

from datetime import datetime
import pytz

utc = pytz.utc

database = Database.objects.get(id=1)

databas.time = utc.localize(datetime.now())

database.save()

因此,当我检查数据库时,更新时间为2015-10-20 23:13:04

而不是2015-10-20 18:13:04

当我通过下面的代码在模板中打印出来时,我得到了这个输出Oct. 20, 2015, 1:13 p.m.

{{ database.time|localtime }}

我很困惑如何使用datetime,pytz和all来获取准确的时间以及settings.py文件。

我想要做的是我想节省UTC时间。但是当我打印出来时,我希望根据用户获得访客的时区和打印时间。我的网站目前只能在美国访问。我的模特有

time = models.DateTimeField(auto_now_add=True)

它节省了一些不同的时间。我有另一个模型,我有一个名为expire time的列,我使用以下代码保存,

expire_time = utc.localize(datetime.now()+ timedelta(hours=24))

表示我想在24小时后过期链接。但这个时区令我困惑。谁能帮我?我不知道在代码中应该使用什么来获得适当的时区。

1 个答案:

答案 0 :(得分:6)

如果设置USE_TZ = True Django以UTC格式存储日期时间。使用以下内容创建时区感知datetime.now

from django.utils import timezone
from datetime import timedelta

database.time = timezone.now()
expire_time = timezone.now() + timedelta(hours=24)

然后,您可以使用activate()将当前时区设置为最终用户的实际时区。 查看"Selecting the current time zone"以查看用户如何选择其时区以及如何使用此选择来激活其时区的示例。