pytz格式化北京時(shí)間多出6分鐘問題的解決方法
起步
在django框架中,用的是 pytz 庫(kù)處理時(shí)區(qū)問題,所以我也嘗試用這個(gè)庫(kù)來(lái)處理。但發(fā)現(xiàn)了一個(gè)奇怪的問題:
import datetime import pytz dt = datetime.datetime(2019,6,20, 12, tzinfo=pytz.timezone('Asia/Shanghai')) print(dt) # 2019-06-20 12:00:00+08:06
為什么多出了 6 分鐘來(lái)?
原因
這是因?yàn)?pytz 里保存是本地時(shí)間。
fmt = '%Y-%m-%d %H:%M:%S %Z%z' dt = datetime.datetime(2019,6,20, 12, tzinfo=pytz.timezone('Asia/Shanghai')) print(dt.strftime(fmt)) # 2019-06-20 12:00:00 LMT+0806
LMT 即 Local Mean Time 本地時(shí)間,也就是說(shuō) 'Asia/Shanghai' 這個(gè)地區(qū)比utc多了8小時(shí)零6分鐘,并不是北京時(shí)間。
解決
所以 pytz 提供了 normalize() 方法來(lái)糾正這個(gè)問題,但傳入的得是不帶時(shí)區(qū)的日期對(duì)象:
cn_zone = pytz.timezone('Asia/Shanghai') dt = cn_zone.localize(dt = datetime.datetime(2019,6,20, 12)) print(dt) # 2019-06-20 12:00:00+08:00 print(dt.strftime(fmt)) # 2019-06-20 12:00:00 CST+0800 # 或者 dt = datetime.datetime(2019,6,20, 12) print(dt.astimezone(cn_zone)) # 2019-06-20 12:00:00 CST+0800
這里推薦的還是用 astimezone 的方式,django 也是采用這種處理方式。
時(shí)區(qū)轉(zhuǎn)換
以從北京時(shí)間轉(zhuǎn)紐約時(shí)間為例,已知結(jié)果它們之間應(yīng)該相差12小時(shí)。
dt = datetime.datetime(2019,6,20, 12) print(dt.astimezone(tz=cn_zone)) # 2019-06-20 12:00:00+08:00 print(dt.astimezone(tz=cn_zone).astimezone(ny_zone)) # 2019-06-20 12:00:00-04:56
額外
另一個(gè)解決時(shí)區(qū)問題就是使用標(biāo)準(zhǔn)庫(kù)的 dateutil 工具。官方內(nèi)置,值得信賴。它支持在創(chuàng)建日期對(duì)象的時(shí)候進(jìn)行設(shè)置,更為方便:
cn = tz.gettz('Asia/Shanghai') aware_dt = datetime.datetime(2019,6,20, 12, tzinfo=cn) print(aware_dt ) # 2019-06-20 12:00:00+08:00 # 時(shí)區(qū)轉(zhuǎn)換(從北京時(shí)間轉(zhuǎn)到紐約時(shí)間) ny = tz.gettz('America/New_York') print(aware_dt.astimezone(tz=ny)) # 2019-06-20 00:00:00-04:00
我更喜歡這種方式。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python打印scrapy蜘蛛抓取樹結(jié)構(gòu)的方法
這篇文章主要介紹了Python打印scrapy蜘蛛抓取樹結(jié)構(gòu)的方法,實(shí)例分析了打印scrapy蜘蛛抓取樹結(jié)構(gòu)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Python實(shí)現(xiàn)的大數(shù)據(jù)分析操作系統(tǒng)日志功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的大數(shù)據(jù)分析操作系統(tǒng)日志功能,涉及Python大文件切分、讀取、多線程操作等相關(guān)使用技巧,需要的朋友可以參考下2019-02-02Python實(shí)現(xiàn)直方圖均衡基本原理解析
這篇文章主要介紹了Python實(shí)現(xiàn)直方圖均衡基本原理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08利用Pytorch實(shí)現(xiàn)獲取特征圖的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Pytorch實(shí)現(xiàn)獲取特征圖,包括提取單個(gè)特征圖和提取多個(gè)特征圖,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-10-10Python文件右鍵找不到IDLE打開項(xiàng)解決辦法
這篇文章主要介紹了Python文件右鍵找不到IDLE打開項(xiàng)解決辦法,本文使用注冊(cè)表解決了這個(gè)問題,需要的朋友可以參考下2015-06-06Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了Pyinstaller 打包發(fā)布經(jīng)驗(yàn)總結(jié),使用Pyinstaller打包Python項(xiàng)目包含了大量的坑,感興趣的可以一起來(lái)了解一下2020-06-06