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

