最近給客戶部署項(xiàng)目時,由于項(xiàng)目在開發(fā)過程中
python
的now()
和utcnow()
的混合使用凌箕,導(dǎo)致部署環(huán)境變化時犀填,數(shù)據(jù)庫中的數(shù)據(jù)在時間展示上出現(xiàn)了bug
1辛慰、時區(qū)設(shè)置
- 主要為標(biāo)準(zhǔn)時區(qū)
UTC
和北京時區(qū)CST
深员,其中CST
=UTC
+8 -
linux
系統(tǒng)時區(qū)設(shè)置负蠕,點(diǎn)我 -
mysql
時區(qū)設(shè)置,點(diǎn)我
2倦畅、項(xiàng)目開發(fā)中的使用
- 數(shù)據(jù)庫中數(shù)據(jù)篩選的時間設(shè)置
- 定時任務(wù)的時間設(shè)置
總結(jié)
- 所有的Linux系統(tǒng)文件系統(tǒng)底層存儲的都是
UTC
時間遮糖,也就是說都是自1970年0時0分0秒以來的UTC標(biāo)準(zhǔn)時間的秒數(shù)。 -
mysql
底層存儲的時間為UTC
時間叠赐,和設(shè)置的時區(qū)無關(guān)欲账,而時區(qū)僅僅是在讀取的時候,用以時間轉(zhuǎn)化芭概。 -
python
使用utcnow()
獲取的為UTC
時間赛不,使用now()
獲取的為系統(tǒng)時區(qū)的時間。
使用建議
-
mysql
時區(qū)設(shè)置為本地時區(qū)- 原因:因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)本身就是為展示使用罢洲,在開發(fā)的項(xiàng)目無國際化需求的時候踢故,建議使用本地時區(qū)也就是
CST
,此時前端可以直接展示惹苗。
- 原因:因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)本身就是為展示使用罢洲,在開發(fā)的項(xiàng)目無國際化需求的時候踢故,建議使用本地時區(qū)也就是
- 系統(tǒng)時區(qū):盡量和
mysql
時區(qū)保持一致- 原因:1殿较、
mysql
使用UTC
時區(qū)時,系統(tǒng)也使用UTC
時區(qū)桩蓉,此時前端的時間展示統(tǒng)一進(jìn)行+8h
處理淋纲;2、mysql
使用CST
時區(qū)時触机,系統(tǒng)也使用CST
時區(qū)帚戳,雖然只要mysql
使用CST
時區(qū)時,前端即可直接顯示儡首,不用處理片任,但是此時python
的now()
和utcnow()
值相同,均比CST
小8h
蔬胯,在同數(shù)據(jù)庫進(jìn)行比較時对供,需要使用+8h
處理,簡直自找麻煩氛濒。
- 原因:1殿较、
- 定時任務(wù):使用
CST
和UTC
均可产场,可自行選擇。