1.Django的時區問題
django默認的時區是UTC,平時是沒有什么影響的,但是在需要將時間戳轉換成本時區的時間或者是獲取當前的本地的localtime的時候就出現了問題。之前程序在測試時是運行在Windows環境,所以即使settings.py中的TIME_ZONE使用默認時區,Django也會根據本機的時區使用當前時區時間。然而程序放到linux運行程序時,Django的時區會使用settings.py中的TIME_ZONE設置的時區,所以這時就出現了問題。再有當我用腳本在linux上測試或者直接進入python環境的時候,運行time.localtime(),顯示本機所在時區的當前時間。
''' 我的django程序中的一部分,這部分功能是將用戶的聊天時間戳轉化為格式化時間。由於我使用的默認時區UTC,原以為在linux環境中會像windows環境中一樣會使用機器設置的時區的時間, 結果並不是,而是使用了默認時區的時間。 ''' import time send_time = 1543524392 day = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(send_time)) print day # 2018-11-29 20:46:32--->UTC 代碼中打印出來的時間是UTC時間
2.Django時區設置
- 在Django的
settings
中,有兩個配置參數是跟時間與時區有關---->TIME_ZONE
和USE_TZ
USE_TZ
為True
,Django使用系統默認時區,即America/Chicago
,此時TIME_ZONE
不管有沒有設置都不起作用。USE_TZ
為False
,TIME_ZONE
為None
,Django會使用默認的America/Chicago
時間。
設置為其它時區,則要具體的程序運行環境。如果是Windows系統,則USE_TZ
為False,
TIME_ZONETIME_ZONE
設置是沒用的,Django會使用本機的所使用的時區。如果為其他系統,則使用TIME_ZONE設置的時區------>即USE_TZ = False
,TIME_ZONE = 'Asia/Shanghai'
, 使用上海的UTC
時間。