使用Python將時間戳轉(zhuǎn)換為時間字符串的實現(xiàn)方法
前言
時間戳是機器可讀的數(shù)字,而時間字符串是人類可讀的日期和時間格式。Python的datetime模塊可以將時間戳轉(zhuǎn)換為時間字符串,并使用strftime()進行格式化。處理時區(qū)時,應先轉(zhuǎn)換為UTC時間。
思考時間戳與時間字符串的一個簡單方法是,一個是為了機器可讀,另一個是為了人類可讀。計算機最擅長處理簡單的數(shù)字表示,就像它們最終將一切處理為 0 和 1 一樣。時間戳就像那樣:一個干凈、高效的數(shù)字,程序可以存儲、排序和計算。
但人類需要上下文、文字、格式和圖像才能理解世界。這就是時間字符串的用武之地。將時間戳轉(zhuǎn)換為可讀的日期和時間,可以將機器代碼轉(zhuǎn)換為我們可以一目了然地解釋的內(nèi)容。
這樣想:
時間戳是為計算機準備的。時間字符串是為我們準備的。
理解 Python 時間戳
時間戳是一個浮點數(shù)或整數(shù),表示自 Unix 紀 元以來經(jīng)過的時間(以秒為單位計數(shù))。什么?Unix 紀 元發(fā)生在 1970 年 1 月 1 日。早在 Unix 設計者創(chuàng)建系統(tǒng)時,他們就需要一個固定的時間點來開始計數(shù)。他們還需要一個不會與重要的歷史日期沖突,并且足夠近以便在現(xiàn)代計算中開始計數(shù)的日期。
什么是時間戳?
自 Unix 紀 元以來,每過去一秒,該數(shù)字就會 +1。1970 年 1 月 1 日 00:00:00 UTC 為 0。2000 年 1 月 1 日 00:00:00 為 946,684,800。2025 年 1 月 1 日 00:00:00 UTC 為 1,735,689,600,這意味著自 Unix 紀 元以來已經(jīng)過去了 1,735,689,600 秒。
Python 中的時間戳示例
首先,我們需要導入 time
模塊,因為這是 Python 內(nèi)置的用于處理日期、時間和時間戳的方法。我們可以使用 time.time()
來獲取當前時間戳。
import time current_timestamp = time.time() print("Current timestamp:", current_timestamp)
您將看到的輸出是自 1970 年 1 月 1 日以來經(jīng)過的確切秒數(shù)。
在 Python 中將時間戳轉(zhuǎn)換為時間字符串
對于那些無法使用秒計數(shù)器引用時間的人,我們有 Python datetime
模塊。datetime
模塊將這些秒轉(zhuǎn)換為我們可以理解的時間格式。
使用 datetime 模塊
datetime
是一個內(nèi)置的 Python 庫,它提供了用于操作日期的類。通過使用 datetime
模塊,我們可以使用相同的起始日期 1970 年 1 月 1 日,但將輸出轉(zhuǎn)換為日期(日歷日期)、一天中的時間、執(zhí)行時間算術、格式化和解析字符串,以及(正如我們上面所看到的)訪問時間戳。
datetime.fromtimestamp() 的語法
fromtimestamp()
是 datetime
類的類方法。它是您調(diào)用以從時間戳創(chuàng)建 datetime
對象的方法。
在下面的代碼中,timestamp
是分配給從 time.time()
返回的數(shù)值的變量。該函數(shù)返回 datetime
對象。
from datetime import datetime import time timestamp = time.time() datetime_object = datetime.fromtimestamp(timestamp) print("Current timestamp:", timestamp) print("Corresponding datetime:", datetime_object)
使用 datetime 的轉(zhuǎn)換示例
您不必每次都打印完整的 datetime
對象。這是一個打印較小信息塊的示例。
from datetime import datetime timestamp = time.time() datetime_object = datetime.fromtimestamp(timestamp) print("Year:", datetime_object.year) print("Month:", datetime_object.month) print("Day:", datetime_object.day) print("Hour:", datetime_object.hour) print("Minute:", datetime_object.minute) print("Second:", datetime_object.second)
在 Python 中格式化時間字符串
我們?yōu)槭裁葱枰獣r間字符串?提取 datetime
對象會為您提供比時間戳更易讀的結(jié)果,但我們可以做得更好。格式化時間字符串允許您將時間自定義為在全球范圍內(nèi)更易讀的方式(即,不同的國家/地區(qū)以不同的方式格式化時間,存在時區(qū)等)。
使用 strftime() 進行格式化
與 fromtimestamp()
類似,strftime()
是 datetime
類中的一個類方法。strftime()
允許您創(chuàng)建自定義的日期/時間字符串格式。
以下是一些格式化代碼:
%Y
是 4 位數(shù)的年份 (2025)%m
是零填充的月份 (06)%d
是月份中的日期 (01)%H
是 24 小時制的小時 (13)%M
是分鐘 (23)%S
是秒 (16)
常見的時間字符串格式
from datetime import datetime import time timestamp = time.time() datetime_object = datetime.fromtimestamp(timestamp) print(datetime_object.strftime("%Y-%m-%d")) print(datetime_object.strftime("%d/%m/%Y %H:%M")) print(datetime_object.strftime("%I:%M %p"))
替代方法
datetime
是將日期和時間引入應用程序的最常用方法。但這不是唯一的方法。Python 的 time
方法(我們一直在使用它來生成時間戳)也可以進行轉(zhuǎn)換。
使用 time 模塊
time
模塊將時間戳轉(zhuǎn)換為可讀的結(jié)構(gòu),但被認為有點低級且不太靈活(稍后會詳細介紹)。如果您只需要簡單的格式或需要與舊的 Python 代碼兼容,您會更喜歡使用 time
模塊。
import time timestamp = time.time() time_struct = time.localtime(timestamp) time_string = time.strftime("%Y-%m-%d %H:%M:%S", time_struct) print("Time string:", time_string)
datetime 和 time 模塊之間的比較
datetime
模塊于 2003 年在 Python 2.3 中發(fā)布,晚于 time
模塊。time
模塊可以追溯到 20 世紀 90 年代。time
模塊更簡單但更有限,尤其是在日期算術或識別時區(qū)等方面。
datetime
帶來了額外的功能,例如:
- 豐富的屬性(
year
、month
等) timedelta
,用于處理日期數(shù)學- 更好的格式化和解析
- 更清晰的時區(qū)處理
datetime
沒有取代 time
(正如您所看到的,我們的編碼示例中都使用了它),但 datetime
是顯示日期和時間的推薦方式。
time
仍然是將時間戳作為浮點數(shù)獲取的最快方法。您可以從 datetime
獲取時間戳,但正如您所看到的,它需要更多的代碼(因此 time
= 更簡單):
from datetime import datetime timestamp = datetime.now().timestamp()
處理時區(qū)
默認情況下,datetime.fromtimestamp()
使用運行代碼的機器的本地時區(qū)。如果您在紐約的筆記本電腦上運行此代碼,它將顯示東部時間。在德國的服務器上運行相同的腳本將顯示中歐時間。
使用統(tǒng)一時區(qū)
假設您想為應用程序的每個用戶顯示東部時間,無論他們身在何處。您可以使用 pytz
庫來做到這一點。在使用它之前,請確保 pip install pytz
。
轉(zhuǎn)換為 UTC
在我們可以指定時區(qū)之前,我們需要將時間戳轉(zhuǎn)換為 UTC。
from datetime import datetime import time timestamp = time.time() datetime_utc = datetime.utcfromtimestamp(timestamp) print("UTC Time:", datetime_utc.strftime("%Y-%m-%d %I:%M %p %Z"))
在我們將時間戳轉(zhuǎn)換為 UTC 后,我們可以使用 pytz
將 UTC 時間轉(zhuǎn)換為東部時間。
from datetime import datetime import pytz import time timestamp = time.time() # convert the timestamp to a UTC datetime object datetime_utc = datetime.utcfromtimestamp(timestamp) # define the US Eastern Time timezone eastern = pytz.timezone('US/Eastern') # localize the UTC datetime and convert to eastern time datetime_eastern = pytz.utc.localize(datetime_utc).astimezone(eastern) print("Eastern Time:", datetime_eastern.strftime("%Y-%m-%d %I:%M %p %Z"))
最佳實踐和常見陷阱
很多內(nèi)容已經(jīng)根據(jù)我們在示例中實踐的方式進行了介紹(即,在指定時區(qū)之前轉(zhuǎn)換為 UTC)。其余的非常簡單,并遵循通常的編碼最佳實踐,例如在使用新代碼時使用 datetime
而不是 time
。在整個項目中也使用一致的格式非常重要。
錯誤處理和故障排除
與最佳實踐類似,在使用 datetime
和 time
時,錯誤處理和故障排除沒有什么特別之處,只需確保變量名稱正確,在進行轉(zhuǎn)換時使用正確的類型,并在使用 strftime()
時小心使用格式化代碼。
您也可以使用類似的錯誤處理:
from datetime import datetime try: timestamp = "not_a_timestamp" datetime_obj = datetime.fromtimestamp(float(timestamp)) except (TypeError, ValueError) as e: print("Error converting timestamp:", e)
結(jié)論
使用 Python 可以輕松地將時間戳轉(zhuǎn)換為可讀的日期。使用 datetime
模塊,您可以快速將時間戳轉(zhuǎn)換為 Python 開發(fā)人員信任的日期字符串。借助 strftime()
,Python 時間戳格式化允許您自定義時間字符串。
將紀 元時間轉(zhuǎn)換為人類可讀的日期很簡單,而像 pytz
這樣的工具可以幫助管理時區(qū)。掌握這些技術意味著可以自信地處理時間數(shù)據(jù),從而使 Python datetime 時間戳到字符串的轉(zhuǎn)換變得輕而易舉。
開始轉(zhuǎn)換,看看將 Unix 時間戳轉(zhuǎn)換為清晰、可讀的時間字符串有多么簡單!
以上就是使用Python將時間戳轉(zhuǎn)換為時間字符串的實現(xiàn)方法的詳細內(nèi)容,更多關于Python時間戳轉(zhuǎn)時間字符串的資料請關注腳本之家其它相關文章!
相關文章
Python 矩陣轉(zhuǎn)置的幾種方法小結(jié)
今天小編就為大家分享一篇Python 矩陣轉(zhuǎn)置的幾種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12解決python?pip安裝第三方模塊報錯:error:legacy-install-failure
pip是python的第三方庫管理器,可以根據(jù)所開發(fā)項目的需要,使用pip相關命令安裝不同庫,下面這篇文章主要給大家介紹了關于解決python?pip安裝第三方模塊報錯:error:?legacy?-?install?-?failure的相關資料,需要的朋友可以參考下2023-04-04Python常用字符串替換函數(shù)strip、replace及sub用法示例
這篇文章主要介紹了Python常用字符串替換函數(shù)strip、replace及sub用法,結(jié)合實例形式分析了Python針對字符串替換的常用函數(shù)strip、replace及sub功能及簡單使用技巧,需要的朋友可以參考下2018-05-05詳解Python 多線程 Timer定時器/延遲執(zhí)行、Event事件
這篇文章主要介紹了Python 多線程 Timer定時器/延遲執(zhí)行、Event事件的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06