2017-04-19 26 views
0

我有一個很難理解的時區是如何工作在Django,所以我在django/utils/timezone.py看了看源代碼,我發現下面的代碼:Django時區現在,我錯過了什麼?

def now(): 
    """ 
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ. 
    """ 
    if settings.USE_TZ: 
     # timeit shows that datetime.now(tz=utc) is 24% slower 
     return datetime.utcnow().replace(tzinfo=utc) 
    else: 
     return datetime.now() 

而且我真的不明白,爲什麼提供tzinfo不依賴於settings.py的TIME_ZONE。

它不應該是這樣的呢?

return datetime.utcnow().replace(tzinfo=get_default_timezone()) 

這種方式timezone.now()真的是時區感知,不是嗎?

回答

1

當啓用USE_TZ時,Django將以UTC存儲所有日期時間,並使用TIME_ZONE設置來顯示存儲的時區。

從Django的timezone docs

當對時區的支持已啓用,Django的商店DATETIME在UTC 信息在數據庫中,使用時區感知日期時間 物體內部,並將它們轉換到最終用戶的時區在 模板和表單中。

+0

「Django以UTC來存儲所有日期時間」。這並不準確。 Django doesn; t總是這樣做 –

+1

感謝指出這@MihaiZamfir。我已經更新了答案。 – v1k45

+0

從源代碼中,UTC類似乎是一個虛擬的「返回0偏移量」,但我想我現在明白了,謝謝! – Nezo