2016-12-01 51 views
0

您好我在Django的 與datetime對象的工作是新我現在所知道的是,而不是Python的datetime.datetime.now()我們應該使用Django的timezone.now(),我還設置TIMEZONEUSE_TZ=True settings.py中 但我的問題是現在轉換這些類型的時間。據我所知,即使我們使用timezone.now()保存在數據庫中,django使用UTC時間來存儲在數據庫中。所以我需要一個簡單的語法來將UTC時間轉換爲在settings.py中設置的本地時間,反之亦然,以便從本地時間獲取本地時間並返回本地時間。 我也看到,django有一些模板標籤來做到這一點,但因爲我主要是爲了一個REST API而使用django-rest,所以我需要能夠在python語法中做到這一點。 感謝大家,我希望我可以在我的意思:)在Django的轉換時間

回答

0

如果清楚,settings.py中,我們有以下幾點:

from pytz import timezone 
LOCAL_TZ = pytz.timezone('CST6CDT') # asume that local timezone is central, but you can use whatever is accurate for your local 

現在,你可以用它來從UTC時間轉換爲本地

import pytz 
from django.conf import settings 

def to_local_dttm(utc_dttm): 
    return utc_dttm.astimezone(settings.LOCAL_TZ) 

def to_utc_dttm(local_dttm): 
    return local_dttm.astimezone(pytz.utc) 
0

在模板中,Django會自動將模型日期(存儲爲UTC)轉換爲當前時區。當前時區由settings.TIMEZONE設置,除非您明確將其更改爲別的地方。你甚至不需要使用特殊的模板標籤。這將罰款轉換:

{{ MyModel.my_date }}

模板以外,還有一個叫localtime,您可以用做同樣的轉換工具。

from django.utils.timezone import localtime 

... 
local_date = localtime(MyModel.my_date) 
print(str(MyModel.my_date)) # UTF time 
print(str(local_date))   # local time 

通過localtime返回的日期時間是time zone aware。如果你需要一個時區天真的日期時間,你可以將它轉換是這樣的:

my_date = localtime(MyModel.my_date).replace(tzinfo=None) 
+0

感謝,非常有幫助的,但我還需要從用戶獲取本地時間,並保存其轉換爲UTC在分貝。什麼是最好的方式?! –

+0

據我所知,該轉換是自動的。例如,如果您使用ModelForm獲取用戶輸入,則Django將假定任何日期時間輸入都在用戶本地時間,並且在保存到數據庫時將轉換爲UTC。 –

+0

哦,如果你問如何獲取用戶的真實本地時區而不是使用'settings.TIMEZONE',那麼做起來並不容易。查看[這個問題]的答案(http://stackoverflow.com/questions/10235956/django-1-4-how-to-automatically-get-users-timezone-from-client)。 –