日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python datetime 如何處理時(shí)區(qū)信息

瀏覽:2日期:2022-07-12 14:58:11

在 Python 常用日期處理 -- 內(nèi)置模塊 datetime 探討了 Python 如何使用 datetime, 如果是一個(gè)跨時(shí)區(qū)的應(yīng)用(Web 應(yīng)用都是),就不能只存儲(chǔ)一個(gè)時(shí)間而不帶時(shí)區(qū),如此,全球用戶將會(huì)看到一個(gè)相同的時(shí)間字符串,白天黑夜就錯(cuò)亂了。比說用戶信息的更新時(shí)間存儲(chǔ)為 2020-07-07 13:46:08, 上海的用戶和芝加哥的用戶看到的是同一個(gè)時(shí)間字符串,實(shí)質(zhì)上卻相差好多個(gè)小時(shí)。

我們可以這么做,在服務(wù)端只存儲(chǔ)一個(gè) Timestamp 長整型值或 UTC 時(shí)間,Timestamp 是無關(guān)乎時(shí)區(qū)的,它總是相對于一個(gè) UTC 時(shí)間的偏移值; 然后由客戶端根據(jù)本地時(shí)區(qū)來顯示當(dāng)?shù)貢r(shí)間。不過在服務(wù)端存儲(chǔ)為 Timestamp 或 UTC 可讀性就不強(qiáng)了,打開文件看到 Timestamp 整形值,大腦是無法直接轉(zhuǎn)換為日期,UTC 時(shí)間略好一些。

另一種做法可在服務(wù)端存儲(chǔ)為開發(fā)者便于理解的帶時(shí)區(qū)的時(shí)間,如 2020-07-07T13:46:08.342+08:00, 客戶獲得該時(shí)間,因?yàn)閹в袝r(shí)區(qū)信息也就能轉(zhuǎn)換為客戶端本地時(shí)間。

客戶端請求時(shí)還可以把本地的時(shí)區(qū)信息傳送給服務(wù)端,由服務(wù)端轉(zhuǎn)換為相應(yīng)的本地時(shí)間發(fā)送給客戶端,但 HTTP 頭信息默認(rèn)不帶時(shí)區(qū)信息,客戶端必須主動(dòng)發(fā)送它。

本人傾向于在服務(wù)端存為帶時(shí)區(qū)的時(shí)間,2020-07-07T13:46:08.342+08:00 是一個(gè)標(biāo)準(zhǔn)的存儲(chǔ)格式(ISO_OFFSET_DATE_TIME),客戶端收到它再轉(zhuǎn)換本地時(shí)間,JavaScript 一個(gè)很好的組件 moment 處理時(shí)間。

探索 Python 對時(shí)區(qū)的處理

Python 內(nèi)置組件不能像 Java 的 ZoneId.of('Asia/Shanghai') 直接以時(shí)區(qū)名獲得 Zone,而需要知道與標(biāo)準(zhǔn)時(shí)區(qū)的偏移,如上海是東八區(qū),在 Python 中要用 timezone(timedelta(hours=+8)).

那么來看 Python 中輸出帶時(shí)區(qū)信息,以下是一些應(yīng)用 Pytho 時(shí)區(qū) timezone 的例子

from datetime import datetime, timezone, timedelta tz = timezone(timedelta(hours=+8)) fmt = ’%Y-%m-%dT%H:%M:%S.%f%z’zoned_time1 = datetime.today().astimezone(tz)print(1, zoned_time1.strftime(fmt)) # 2020-07-08T04:30:26.221450+0800 zoned_time2 = datetime.now(tz)print(2, zoned_time2.strftime(fmt)) # 2020-07-08T04:30:26.221543+0800 zoned_time3 = datetime.utcnow()print(3, zoned_time3.isoformat()) # 2020-07-07T20:30:26.221848 print(4, zoned_time2.strftime(’%Y-%m-%dT%H:%M:%S.%f%Z’)) # 2020-07-08T04:30:26.221543UTC+08:00 timestamp = datetime.today().timestamp()print(5, timestamp) # 1594153826.221895print(6, datetime.fromtimestamp(timestamp, tz=tz)) # 2020-07-08 04:30:26.221895+08:00 zoned_time4 = datetime(2020, 7, 8, 4, 23, 53, 112, tzinfo=tz)print(7, zoned_time4.isoformat()) # 2020-07-08T04:23:53.000112+08:00 print(8, zoned_time2.isoformat()) # 2020-07-08T04:30:26.221543+08:00

輸出為, 已加到上面源代碼中

1 2020-07-08T04:30:26.221450+08002 2020-07-08T04:30:26.221543+08003 2020-07-07T20:30:26.2218484 2020-07-08T04:30:26.221543UTC+08:005 1594153826.2218956 2020-07-08 04:30:26.221895+08:007 2020-07-08T04:23:53.000112+08:008 2020-07-08T04:30:26.221543+08:00

時(shí)間字符串中要帶有時(shí)區(qū)信息,首先時(shí)間要轉(zhuǎn)換為帶時(shí)區(qū)的,如用

datetime.astimezone(tz) # 已有時(shí)間轉(zhuǎn)換為帶時(shí)區(qū)的datetime.fromtimestamp(timestamp, tz=tz) # 從 timestamp 構(gòu)建 datetime 時(shí)加上時(shí)區(qū)

找到 Python 輸出標(biāo)準(zhǔn)格式的方法

從上面的輸出結(jié)果看第 8 行 2020-07-08T04:30:26.221543+08:00 接近于 Java 的 ISO_OFFSET_DATE_TIME 格式,只是毫秒段 Python 用了 6 位數(shù)字,參考 strftime-strptime-behavior 的 Python datetime 格式字符串定義找不到如何把毫秒段收縮為 3 位。

不過注意到 datetime.isoformat() 方法還有一個(gè) timespec 可用,執(zhí)行下面的代碼

from datetime import datetime, timezone, timedelta tz = timezone(timedelta(hours=+8))now = datetime.now(tz)print(now.isoformat(timespec=’milliseconds’))

輸出為

2020-07-08T04:41:10.793+08:00

這正式我們想要的。還不僅僅是,繼續(xù)往下讀,我們還需要讓 Python 支持夏令時(shí),否則對于芝加哥時(shí)間夏天和冬天看到的都是 -5, 那是不對的。

pytz 組件構(gòu)建時(shí)區(qū)

Python 也有一個(gè)通過時(shí)區(qū)名稱獲得 timezone 的組件,那就是 pytz - Python TimeZone

$ pip install pytz

測試 pytz

from datetime import datetimefrom pytz import timezone tz_shanghai = timezone(’Asia/Shanghai’)tz_chicago = timezone(’America/Chicago’) print(datetime.now(tz=tz_shanghai).isoformat(timespec=’milliseconds’))print(datetime.now(tz=tz_chicago).isoformat(timespec=’milliseconds’))

輸出為

2020-07-08T04:55:29.699+08:002020-07-07T15:55:29.699-05:00

關(guān)于夏令時(shí)與冬令時(shí)

國內(nèi)實(shí)行夏令時(shí)制還是很多年前的事了,80 后初期生人或許還有些印象,就是下午放了學(xué)走到街上就能看到《新聞聯(lián)播》。為了達(dá)成一切形式的統(tǒng)一,我們不再實(shí)行夏令時(shí)制了,避免了造成可能的分裂。但其他國家仍然有下令時(shí),這會(huì)造成同一個(gè)地方在一年中產(chǎn)生兩個(gè)時(shí)區(qū)。

例如芝加哥,在夏季時(shí) timezone 是 -05:00, 冬季時(shí)是 -06:00.

現(xiàn)在就來看一下 Python 是否能正確的處理夏令時(shí)(Date Saving Time)與冬令時(shí)(Night Saving Time)。回看上面代碼是在 7 月份執(zhí)行的結(jié)果,此時(shí)如果把本地時(shí)間改為 12 月份,再看輸出

2020-12-08T06:10:27.862+08:002020-12-07T16:10:27.862-06:00

上海的時(shí)區(qū)仍然為 +08:00, 而芝加哥的時(shí)區(qū)變成了 -06:00

Python 本身不支持對時(shí)令的支持,Python 只知道與 UTC 標(biāo)準(zhǔn)時(shí)區(qū)的偏移,timezone(timedelta(hours=-5),夏天冬天它的偏移都是 -5,實(shí)現(xiàn)夏令冬令時(shí)是由 pytz 達(dá)成的,同樣的 tz = timezone(’America/Chiago’)

夏天的結(jié)果是 Python 的 timezone(timedelta(hours=-5))冬天的結(jié)果是 Python 的 timezone(timedelta(hours=-6))

對比 Java 對時(shí)區(qū)的處理

不妨看下隔壁 Java 是如何對時(shí)區(qū)處理的,分別測試了新舊時(shí)間 API

Date today = new Date();System.out.println(new SimpleDateFormat('yyyy-MM-dd’T’HH:mm:ss.SSSXXX').format(today)); ZonedDateTime now = ZonedDateTime.now(ZoneId.of('Asia/Shanghai'));System.out.println(now.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

2020-07-07T14:53:55.017-05:002020-07-08T03:53:55.031+08:00

小結(jié)一下

時(shí)間用 Timestamp(長整形值) 或統(tǒng)一的 UTC 時(shí)間存儲(chǔ)和傳輸,在顯示時(shí)轉(zhuǎn)換為本地時(shí)間,但存儲(chǔ)介質(zhì)上可讀性差用 timezone(timedelta(hours=-5)) 應(yīng)用時(shí)區(qū)來存儲(chǔ),可讀性增強(qiáng),但會(huì)有夏/冬令時(shí)間誤差問題用 pytz 的 timezone(’America/Chicago’) 由時(shí)區(qū)名來構(gòu)造 timezone 很好的解決了時(shí)區(qū)和夏/冬令時(shí)的問題

以上就是Python datetime 如何處理時(shí)區(qū)信息的詳細(xì)內(nèi)容,更多關(guān)于Python datetime 處理時(shí)區(qū)信息的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国内精品福利| 岛国av在线播放| 国产精品白丝久久av网站| 午夜a一级毛片亚洲欧洲| 999精品在线| 国产精品网址| 国产综合视频| 亚洲一区激情| 国产伊人久久| 中文字幕一区日韩精品| 亚洲一区日韩在线| 欧美福利专区| 国产粉嫩在线观看| 911精品国产| 午夜亚洲一区| 国内一区二区三区| av不卡免费看| 日本在线高清| 蜜桃一区二区三区在线| 国产日韩一区| 国产精品videossex| 中文在线免费视频| 热久久久久久久| 国产成人精品一区二区三区视频| 国产专区一区| 麻豆国产91在线播放| 亚洲黄色网址| 欧美激情福利| 最新国产精品| 欧美日韩色图| 国产欧美日韩一区二区三区四区 | 亚洲欧美日韩国产一区| 欧美a在线观看| 亚洲精品乱码| 亚洲天堂日韩在线| 久久国产成人| 日韩中文av| 超碰在线99| 日本亚洲不卡| 欧美一区=区| 亚洲va在线| 四虎4545www国产精品| 国产黄色一区| 欧美日韩国产高清| 秋霞国产精品| 日韩精品一区二区三区免费观影| 久久av综合| 国产欧美一区二区色老头| 日韩专区一卡二卡| 亚洲欧美高清| 玖玖玖国产精品| 亚洲欧美日韩国产| 尤物在线精品| 一区免费在线| 亚洲午夜一级| 国产一区清纯| 久久中文字幕av| 日韩欧美一区二区三区在线视频 | 另类欧美日韩国产在线| 日本免费在线视频不卡一不卡二| 视频一区二区三区中文字幕| 久久亚洲二区| 日韩精品一区二区三区中文在线| 亚洲精品乱码| 国产欧美一区二区色老头| 91精品视频一区二区| 91精品国产自产精品男人的天堂| 一区二区精品| 久久亚洲二区| 日韩va亚洲va欧美va久久| 四虎成人精品一区二区免费网站| 99国产精品99久久久久久粉嫩| 美女毛片一区二区三区四区| 国产亚洲欧洲| 91麻豆精品| 麻豆久久一区二区| 亚洲不卡系列| 国产一区二区高清| 蜜桃一区二区三区在线| 婷婷久久免费视频| 欧美激情视频一区二区三区在线播放| 欧美韩日一区| 男女性色大片免费观看一区二区| 先锋亚洲精品| 国产乱人伦丫前精品视频| 国产精品高颜值在线观看| 欧美日韩第一| 国产亚洲精品精品国产亚洲综合| 精品理论电影在线| 影音先锋国产精品| 国产精品片aa在线观看| 日韩欧美字幕| 婷婷精品在线| 欧美精品日日操| 亚州av日韩av| 精品三级久久| 国产精选一区| 最新日韩欧美| 青青青国产精品| 欧美久久精品| 色在线中文字幕| 免费久久99精品国产自在现线| 国产欧美日韩一区二区三区在线| 99精品视频在线| 国产精品xvideos88| 久久影院午夜精品| 涩涩涩久久久成人精品| 亚洲永久av| 久久av综合| 悠悠资源网久久精品| 97精品国产福利一区二区三区| 一区二区高清| 婷婷色综合网| 国产精品久久久久av蜜臀| 爽爽淫人综合网网站| 999久久久91| 高清不卡亚洲| 国产毛片精品久久| 国产精品视频一区二区三区综合| 一区二区高清| 99精品综合| 欧美丰满日韩| 久久精品国产999大香线蕉| 日韩精品国产精品| 一区二区精品| 香蕉成人久久| 99精品99| 色婷婷久久久| 久久wwww| 久久香蕉网站| 老司机精品视频网| 国产乱码精品一区二区三区四区 | 亚洲欧美日韩国产一区二区| 欧美在线观看视频一区| 国产中文在线播放| 中文在线а√在线8| 日韩一区二区三区在线免费观看| 99久久精品国产亚洲精品| 激情久久五月| 久久国产精品久久久久久电车| 免费一级片91| 国产亚洲精品美女久久| 精品精品久久| 精品国模一区二区三区| 在线综合亚洲| 国产精品一区二区中文字幕| 国产美女高潮在线观看| 视频福利一区| 日本中文字幕视频一区| 欧美日韩一区二区三区在线电影| 久久伊人亚洲| 欧美午夜精彩| 日韩精品a在线观看91| 国产欧美一区二区三区国产幕精品| 精品九九在线| 国产综合婷婷| 国产精品成人自拍| 日韩国产欧美| 亚洲图片久久| 天堂√中文最新版在线| 玖玖玖国产精品| 卡一卡二国产精品| 国产成人免费| 中文久久精品| 丝袜美腿亚洲一区| 国产精品大片免费观看| 日韩精品久久久久久久电影99爱| 视频一区在线播放| 丰满少妇一区| 亚洲丝袜啪啪| 久久精品主播| 国产精品分类| 综合一区二区三区| 丝袜美腿诱惑一区二区三区| 日韩精品一区二区三区av | 老司机免费视频一区二区| 美女毛片一区二区三区四区 | 久久国产视频网| 精品1区2区3区4区| 欧美13videosex性极品| 国产亚洲精品美女久久久久久久久久| 99国产精品一区二区| 久久久久黄色| 国产乱码精品一区二区三区四区 | 国产精品日本一区二区三区在线| 亚洲精品成人| 色偷偷偷在线视频播放| 亚洲午夜视频| 女生影院久久| 亚洲综合在线电影| 加勒比视频一区| 久久香蕉精品香蕉| 国产精品激情| 六月丁香综合在线视频| 国产经典一区| 日韩国产欧美在线播放| 亚洲资源网站| 日韩精品乱码av一区二区| 日韩成人一级| 日韩av电影一区|