2015-10-21 130 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

目前沒有時間碼。我不保存默認時間。我正在更新到期時間。 –