Pythondatetime如何處理時區(qū)信息-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的南關(guān)網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

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

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

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

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

那么來看 Python 中輸出帶時區(qū)信息,以下是一些應(yīng)用 Pytho 時區(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.221895
print(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

網(wǎng)站題目:Pythondatetime如何處理時區(qū)信息-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article28/csphcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、云服務(wù)器、App開發(fā)、商城網(wǎng)站、搜索引擎優(yōu)化品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營