Python-Django时区无法正常工作

Dja*_*ner 5 python django timezone datetime pytz

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

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

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

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

from datetime import datetime
import pytz

utc = pytz.utc

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

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

database.save()
Run Code Online (Sandbox Code Playgroud)

所以当我检查数据库时,更新的时间是 2015-10-20 23:13:04

代替 2015-10-20 18:13:04

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

{{ database.time|localtime }}
Run Code Online (Sandbox Code Playgroud)

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

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

time = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

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

expire_time = utc.localize(datetime.now()+ timedelta(hours=24))
Run Code Online (Sandbox Code Playgroud)

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

Ret*_*old 7

如果您将USE_TZ = TrueDjango存储日期时间设置为UTC.使用以下命令创建时区datetime.now:

from django.utils import timezone
from datetime import timedelta

database.time = timezone.now()
expire_time = timezone.now() + timedelta(hours=24)
Run Code Online (Sandbox Code Playgroud)

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