Python與Django的時區問題
在編碼中牽扯到時間問題的時候,總是容易被時區問題搞混,一直以來,都是反覆試驗應付過去,今天終於搞清楚了個中緣由,一個心結也得以化解。
Python 的時區問題
datetime.today() / datetime.now()
這兩個函數獲得的是當前的系統時間,但得到的datetime物件中的tzinfo是空的,即使系統中設定了時區。
datetime.utcnow()
這個函數獲得當前的utc時間,應該是根據當前系統時間和時區來計算的。
例如係統時間為14:00,時區為 Asia/Shanghai (北京時間),utcnow返回時間為 6:00。同樣,得到的對像中的tzinfo 為空。
環境變數TZ 對以上函數的影響:
當系統中設定了環境變數TZ 的時候,或是在python中設定了os.environ['TZ'] 的時候,上面的函數取得的時間是TZ對應時區的時間。其實這裡可以認為 TZ 影響的不是這些函數,而是影響的系統時間,可以從date指令的回傳結果看出。 datetime.now() 與 date指令傳回的結果總是一致的。
Django的時區問題
明白了上面幾個python的函數,django的時區問題看起來就簡單了。
在django的setting中,有一個設定是 TIME_ZONE, 來設定程式中使用的時區。
從django的文檔中得知,TIME_ZONE的作用就是改變os.environ['TZ'] ,但改變os.environ['TZ'] 並不會改變系統環境變數TZ , 因此,如果TIME_ZONE 的設定在系統時區設定不一致,則在程式中datetime.now() 所獲得的時間就與date 指令的時間不一致了。
因此,TIME_ZONE 應該設定為程式希望使用的時區。對於一個本地的程序,TIME_ZONE 設定為與系統時區一樣即可;而對於一個國際化的應用,TIME_ZONE 最好設置為UTC,在顯示的時候再根據當前用戶所在的時區做調整。
手冊
classmethod datetime.now([tz])
Return the current local date and time. If optional argument tz is None or not specified, this is like today, is liken, suoss. can be gotten from going through a time.time() timestamp (for example, this may be possible on platforms supplying the C gettimeofday() function).
Else tz must be an instance of class class class and time are converted to tz's time zone. In this case the result is equivalent to tz.fromutc(datetime.utcnow().replace(tzinfo=tz)). See also today(), utcnow().
classmethod datetime.utcnow()
Return the current UTC date and time, with tzinfo None. This is like now(), but returns the current UTC date and time, as a naivedatetime object. See also current UTC date and time, as a naivedatetime object. See also now()。代碼
import pytz .... #dt the datetime var dt.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Asia/Shanghai'))

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...
