詳解python如何正確使用時(shí)間戳,日期,時(shí)間,時(shí)區(qū)
時(shí)間概念
utc與時(shí)區(qū)
UTC是Coordinated Universal Time的縮寫,是全球時(shí)間的標(biāo)準(zhǔn),UTC時(shí)間不受時(shí)區(qū)和夏令時(shí)的影響,是時(shí)間的標(biāo)準(zhǔn)。全球各地的時(shí)間以UTC時(shí)間為參考進(jìn)行調(diào)整。
時(shí)區(qū)是Time Zone,是地球上按照經(jīng)度劃分的區(qū)域,每個(gè)區(qū)域有自己的標(biāo)準(zhǔn)時(shí)間,時(shí)區(qū)與UTC時(shí)間的差距通常以小時(shí)為單位(但有些時(shí)區(qū)偏移的時(shí)間有30分鐘)。整個(gè)地球被劃分為24個(gè)主要時(shí)區(qū),每個(gè)時(shí)區(qū)大約覆蓋15度經(jīng)度(360度/24小時(shí))
北京時(shí)間是東八區(qū),東八區(qū)也就是比UTC時(shí)間偏移了8小時(shí),也就是UTC+8,在世界上,同樣在東八區(qū)的,還有澳大利亞的地區(qū)。
紐約時(shí)間是西五區(qū),也就是UTC-5,因此,距離北京時(shí)間的東八區(qū)標(biāo)準(zhǔn)時(shí)間差是13小時(shí)。但是需要注意的是,當(dāng)紐約地區(qū)開始夏令時(shí)的時(shí)候,會變成UTC-4,此時(shí)就是常見的12小時(shí)時(shí)差了。
東京時(shí)間是東九區(qū),也就是UTC+9,因此,距離北京時(shí)間的東八區(qū)差是1小時(shí),且是早1小時(shí)。
夏令時(shí)
夏令時(shí)是一種人為調(diào)整時(shí)鐘的制度,通常在春季將時(shí)鐘向前調(diào)一個(gè)小時(shí),其目的是延長晚間的日照時(shí)間,旨在更有效地利用日光資源,減少能源消耗。
其中,北半球的高緯度國家通常使用夏令時(shí),因?yàn)槠渚暥雀?,日照變化大。與之相反,接近赤道的地區(qū),日照變化不大,因此通常不用夏令時(shí)。例如大部分亞洲國家,如中國,日本,韓國,都不使用夏令時(shí)。
沒有使用過夏令時(shí)地區(qū)的人,通常對于夏令時(shí)的作用不太了解,具體來說:夏令時(shí)期間,時(shí)鐘被撥快一小時(shí)。這意味著人們按照新的時(shí)間表作息,早上實(shí)際比平時(shí)早起一小時(shí),但由于夏季天亮較早,對生活影響不大。下午下班時(shí),按照新的時(shí)間,天色仍然明亮,人們可以在下班后享受更多的日照時(shí)間。
時(shí)間戳
時(shí)間戳是Timestamp是一種表示特定時(shí)間點(diǎn)的數(shù)字格式,基于UTC時(shí)間的1970年1月1日00:00:00以來經(jīng)過的秒數(shù)或毫秒數(shù)來表示,時(shí)間戳可以精確地標(biāo)識一個(gè)具體的時(shí)間點(diǎn),該時(shí)間點(diǎn)不受時(shí)區(qū)影響。
時(shí)間戳在編程中有很大作用,例如,記錄某個(gè)系統(tǒng)事件,用戶注冊的時(shí)間,或者通過計(jì)算時(shí)間戳的差,來計(jì)算時(shí)間間隔。
time
通用格式化
time主要處理時(shí)間的獲取和簡單的格式化,如果需要更復(fù)雜的日期和時(shí)間操作,應(yīng)該嘗試使用datetime
常用的格式化字符串方式如下所示,并且datetime中同樣也這樣使用
- %Y:四位年份
- %m:兩位月份(01-12)
- %d:兩位日期(01-31)
- %H:兩位小時(shí)(00-23)
- %M:兩位分鐘(00-59)
- %S:兩位秒(00-59)
時(shí)間戳
獲取當(dāng)前時(shí)間戳
import time timestamp = time.time() print("當(dāng)前時(shí)間戳:", timestamp)
時(shí)間戳可以用于記錄時(shí)間間隔,不過,如果要更精準(zhǔn)的計(jì)時(shí)可以用
import time start = time.perf_counter() time.sleep(2) end = time.perf_counter() print(f"操作耗時(shí): {end - start} 秒")
時(shí)間戳轉(zhuǎn)為時(shí)間對象
時(shí)間戳轉(zhuǎn)換為struct_time本地時(shí)間
timestamp = time.time() local_time = time.localtime(timestamp) print("本地時(shí)間:", local_time)
將時(shí)間戳轉(zhuǎn)換為utc時(shí)間
timestamp = time.time() utc_time = time.gmtime(timestamp) print("UTC時(shí)間:", utc_time)
時(shí)間對象轉(zhuǎn)為時(shí)間戳
import time struct = time.strptime("2024-11-02 22:00:00", "%Y-%m-%d %H:%M:%S") timestamp = time.mktime(struct) print("時(shí)間戳:", timestamp) # 時(shí)間戳: 1730556000.0
時(shí)間格式化
將一個(gè)時(shí)間戳快速轉(zhuǎn)為可讀時(shí)間
timestamp = time.time() readable_time = time.ctime(timestamp) print(readable_time) # 格式如Sat Nov 2 10:32:27 2024
根據(jù)時(shí)間字符串,創(chuàng)建時(shí)間對象
time_str = "2024-11-02 22:00:00" parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S") print(parsed_time)
根據(jù)時(shí)間對象,轉(zhuǎn)為字符串
time_str = "2024-11-02 22:00:00" parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S") formatted_time = time.strftime("%Y年%m月%d日%H點(diǎn)%M分", parsed_time) print("格式化時(shí)間:", formatted_time) # 格式化時(shí)間:2024年11月02日22點(diǎn)00分
時(shí)間暫停
時(shí)間是不會暫停的,實(shí)際上該功能是程序暫停
import time print("暫停前") time.sleep(3) # 暫停3秒 print("暫停后")
datetime
date日期
獲取當(dāng)前日期
today = datetime.date.today() print("今天的日期:", today) # 格式如2024-11-02
datetime日期時(shí)間
獲取當(dāng)前時(shí)間
now_time = datetime.datetime.now().time() print("當(dāng)前時(shí)間:", now_time) # 格式如10:46:50.506231
獲取當(dāng)前日期與時(shí)間
now = datetime.datetime.now() print("當(dāng)前日期和時(shí)間:", now) # 格式如2024-11-02 10:47:44.299445
獲取UTC時(shí)間
utc_now = datetime.datetime.utcnow() print("UTC時(shí)間:", utc_now)
創(chuàng)建日期時(shí)間對象
創(chuàng)建日期對象
specific_date = datetime.date(2024, 11, 2) print("特定日期:", specific_date)
創(chuàng)建時(shí)間對象
specific_time = datetime.time(22, 0, 0) print("特定時(shí)間:", specific_time)
創(chuàng)建日期時(shí)間對象
specific_datetime = datetime.datetime(2024, 11, 2, 22, 0, 0) print("特定日期和時(shí)間:", specific_datetime)
時(shí)間字符串格式化與解析
時(shí)間字符串格式化
now = datetime.datetime.now() formatted = now.strftime("%Y-%m-%d %H:%M:%S") print("格式化日期時(shí)間:", formatted)
時(shí)間字符串解析
time_str = "2024-11-2 22:00:00" parsed_datetime = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") print("解析后的日期時(shí)間對象:", parsed_datetime)
時(shí)間間隔
使用timedelta計(jì)算時(shí)間間隔的日期
from datetime import date, timedelta today = date.today() future_date = today + timedelta(days=10) print("10天后的日期:", future_date) past_date = today - timedelta(weeks=1) print("一周前的日期:", past_date)
計(jì)算時(shí)間間隔的日期時(shí)間
from datetime import datetime, timedelta now = datetime.now() future_time = now + timedelta(minutes=10) print("10分鐘后的日期時(shí)間:", future_time) past_time = now - timedelta(hours=2) print("2小時(shí)前的日期時(shí)間:", past_time)
zoneinfo
時(shí)間轉(zhuǎn)換
在python 3.9以后,引入了zoneinfo用于處理時(shí)區(qū),并且能夠直接用于datetime
from datetime import datetime from zoneinfo import ZoneInfo now_utc = datetime.now(ZoneInfo("UTC")) print("UTC時(shí)間:", now_utc) # 轉(zhuǎn)換為北京時(shí)間 now_beijing = now_utc.astimezone(ZoneInfo("Asia/Shanghai")) print("北京時(shí)間:", now_beijing) # 轉(zhuǎn)換為紐約時(shí)間 now_newyork = now_utc.astimezone(ZoneInfo("America/New_York")) print("紐約時(shí)間:", now_newyork)
實(shí)際上,時(shí)間轉(zhuǎn)換也可以自行進(jìn)行計(jì)算,例如,我們已經(jīng)了解了北京時(shí)間是UTC+8,紐約時(shí)間是UTC-5
from datetime import datetime, timedelta now_utc = datetime.utcnow() print("UTC時(shí)間:", now_utc) now_beijing = now_utc + timedelta(hours=8) print("北京時(shí)間:", now_beijing) now_newyork = now_utc - timedelta(hours=5) print("紐約時(shí)間:", now_newyork)
列出所有時(shí)區(qū)
所有時(shí)區(qū)
import zoneinfo print(zoneinfo.available_timezones())
遍歷找到其中的Asia時(shí)區(qū)
import zoneinfo for zone in zoneinfo.available_timezones(): if "Asia" in zone: print(zone)
獲取時(shí)區(qū)時(shí)間
如果在使用當(dāng)前時(shí)間的時(shí)候,總是自行設(shè)置本地時(shí)區(qū)的時(shí)間,而不依賴于機(jī)器設(shè)置,可以獲得更好的跨平臺性
from datetime import datetime from zoneinfo import ZoneInfo tz_shanghai = ZoneInfo("Asia/Shanghai") tz_newyork = ZoneInfo("America/New_York") now_shanghai = datetime.now(tz_shanghai) now_newyork = datetime.now(tz_newyork) print("北京時(shí)間:", now_shanghai) print("紐約時(shí)間:", now_newyork)
以上就是詳解python如何正確使用時(shí)間戳,日期,時(shí)間,時(shí)區(qū)的詳細(xì)內(nèi)容,更多關(guān)于python時(shí)間的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PyQt5簡單讀取以及顯示圖片的應(yīng)用實(shí)例
我們在進(jìn)行圖像處理時(shí),經(jīng)常會用到讀取圖片并顯示出來這樣的操作,下面這篇文章主要給大家介紹了關(guān)于PyQt5簡單讀取以及顯示圖片應(yīng)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05對Python random模塊打亂數(shù)組順序的實(shí)例講解
今天小編就為大家分享一篇對Python random模塊打亂數(shù)組順序的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11解讀MaxPooling1D和GlobalMaxPooling1D的區(qū)別
這篇文章主要介紹了MaxPooling1D和GlobalMaxPooling1D的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Python實(shí)現(xiàn)時(shí)鐘顯示效果思路詳解
這篇文章主要介紹了Python實(shí)現(xiàn)時(shí)鐘顯示,需要的朋友可以參考下2018-04-04Python實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)遍歷大量表格文件并篩選出表格內(nèi)數(shù)據(jù)缺失率低的文件的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05matplotlib實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新的示例代碼
這篇文章主要介紹了matplotlib實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python中DataFrame與內(nèi)置數(shù)據(jù)結(jié)構(gòu)相互轉(zhuǎn)換的實(shí)現(xiàn)
pandas?支持我們從?Excel、CSV、數(shù)據(jù)庫等不同數(shù)據(jù)源當(dāng)中讀取數(shù)據(jù),來構(gòu)建?DataFrame。但有時(shí)數(shù)據(jù)并不來自這些外部數(shù)據(jù)源,這就涉及到了?DataFrame?和?Python?內(nèi)置數(shù)據(jù)結(jié)構(gòu)之間的相互轉(zhuǎn)換,本文就來和大家詳細(xì)聊聊2023-02-02Python利用matplotlib繪制約數(shù)個(gè)數(shù)統(tǒng)計(jì)圖示例
這篇文章主要介紹了Python利用matplotlib繪制約數(shù)個(gè)數(shù)統(tǒng)計(jì)圖,結(jié)合實(shí)例形式詳細(xì)分析了Python使用matplotlib進(jìn)行統(tǒng)計(jì)圖繪制的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11