最近給客戶部署項(xiàng)目時(shí),由于項(xiàng)目在開發(fā)過程中
python
的now()
和utcnow()
的混合使用,導(dǎo)致部署環(huán)境變化時(shí),數(shù)據(jù)庫中的數(shù)據(jù)在時(shí)間展示上出現(xiàn)了bug
1、時(shí)區(qū)設(shè)置
- 主要為標(biāo)準(zhǔn)時(shí)區(qū)
UTC
和北京時(shí)區(qū)CST
,其中CST
=UTC
+8 -
linux
系統(tǒng)時(shí)區(qū)設(shè)置,點(diǎn)我 -
mysql
時(shí)區(qū)設(shè)置,點(diǎn)我
2、項(xiàng)目開發(fā)中的使用
- 數(shù)據(jù)庫中數(shù)據(jù)篩選的時(shí)間設(shè)置
- 定時(shí)任務(wù)的時(shí)間設(shè)置
總結(jié)
- 所有的Linux系統(tǒng)文件系統(tǒng)底層存儲(chǔ)的都是
UTC
時(shí)間,也就是說都是自1970年0時(shí)0分0秒以來的UTC標(biāo)準(zhǔn)時(shí)間的秒數(shù)。 -
mysql
底層存儲(chǔ)的時(shí)間為UTC
時(shí)間,和設(shè)置的時(shí)區(qū)無關(guān),而時(shí)區(qū)僅僅是在讀取的時(shí)候,用以時(shí)間轉(zhuǎn)化。 -
python
使用utcnow()
獲取的為UTC
時(shí)間,使用now()
獲取的為系統(tǒng)時(shí)區(qū)的時(shí)間。
使用建議
-
mysql
時(shí)區(qū)設(shè)置為本地時(shí)區(qū)- 原因:因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)本身就是為展示使用,在開發(fā)的項(xiàng)目無國際化需求的時(shí)候,建議使用本地時(shí)區(qū)也就是
CST
,此時(shí)前端可以直接展示。
- 原因:因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)本身就是為展示使用,在開發(fā)的項(xiàng)目無國際化需求的時(shí)候,建議使用本地時(shí)區(qū)也就是
- 系統(tǒng)時(shí)區(qū):盡量和
mysql
時(shí)區(qū)保持一致- 原因:1、
mysql
使用UTC
時(shí)區(qū)時(shí),系統(tǒng)也使用UTC
時(shí)區(qū),此時(shí)前端的時(shí)間展示統(tǒng)一進(jìn)行+8h
處理;2、mysql
使用CST
時(shí)區(qū)時(shí),系統(tǒng)也使用CST
時(shí)區(qū),雖然只要mysql
使用CST
時(shí)區(qū)時(shí),前端即可直接顯示,不用處理,但是此時(shí)python
的now()
和utcnow()
值相同,均比CST
小8h
,在同數(shù)據(jù)庫進(jìn)行比較時(shí),需要使用+8h
處理,簡直自找麻煩。
- 原因:1、
- 定時(shí)任務(wù):使用
CST
和UTC
均可,可自行選擇。