2015-10-21 158 views
1

我正在使用基于Django的网站。我正在尝试获取正确的时区和时间来显示。但它不能正常工作。我住在得克萨斯州的达拉斯。所以我的默认时区是'美国/芝加哥'。Python-Django时区无法正常工作

我的settings.py文件包含这几行代码。

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

我有datetime和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 }} 

我很困惑如何使用日期时间,pytz和随着settings.py文件获得准确的时间。

我想要做的是我想保存UTC时间。但是当我打印出来时,我想根据用户来获取访客的时区和打印时间。我的网站现在只能在美国访问。我的型号有

time = models.DateTimeField(auto_now_add=True) 

它节省了一些不同的时间。我有另一种模式,我有一个名为到期这里我使用如下代码,以节省时间列,

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

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

回答

4

如果您设置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"以查看用户如何选择自己的时区以及如何使用此选项激活其时区的示例。

+0

那么我的settings.py代码应该如何?他们是否正确?正如我所说的,'models.DateTimeField(auto_now_add = True)'不会节省UTC时间。我不知道为什么。 –

+0

是的,你的设置看起来不错。您可以在创建新实例后发布“时间”字段的值吗? –

+0

目前没有时间码。我不保存默认时间。我正在更新到期时间。 –