使用Python將時間戳轉(zhuǎn)換為時間字符串的實(shí)現(xiàn)方法
前言
時間戳是機(jī)器可讀的數(shù)字,而時間字符串是人類可讀的日期和時間格式。Python的datetime模塊可以將時間戳轉(zhuǎn)換為時間字符串,并使用strftime()進(jìn)行格式化。處理時區(qū)時,應(yīng)先轉(zhuǎn)換為UTC時間。
思考時間戳與時間字符串的一個簡單方法是,一個是為了機(jī)器可讀,另一個是為了人類可讀。計(jì)算機(jī)最擅長處理簡單的數(shù)字表示,就像它們最終將一切處理為 0 和 1 一樣。時間戳就像那樣:一個干凈、高效的數(shù)字,程序可以存儲、排序和計(jì)算。
但人類需要上下文、文字、格式和圖像才能理解世界。這就是時間字符串的用武之地。將時間戳轉(zhuǎn)換為可讀的日期和時間,可以將機(jī)器代碼轉(zhuǎn)換為我們可以一目了然地解釋的內(nèi)容。
這樣想:
時間戳是為計(jì)算機(jī)準(zhǔn)備的。時間字符串是為我們準(zhǔn)備的。
理解 Python 時間戳
時間戳是一個浮點(diǎn)數(shù)或整數(shù),表示自 Unix 紀(jì) 元以來經(jīng)過的時間(以秒為單位計(jì)數(shù))。什么?Unix 紀(jì) 元發(fā)生在 1970 年 1 月 1 日。早在 Unix 設(shè)計(jì)者創(chuàng)建系統(tǒng)時,他們就需要一個固定的時間點(diǎn)來開始計(jì)數(shù)。他們還需要一個不會與重要的歷史日期沖突,并且足夠近以便在現(xiàn)代計(jì)算中開始計(jì)數(shù)的日期。
什么是時間戳?
自 Unix 紀(jì) 元以來,每過去一秒,該數(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ì) 元以來已經(jīng)過去了 1,735,689,600 秒。
Python 中的時間戳示例
首先,我們需要導(dǎo)入 time 模塊,因?yàn)檫@是 Python 內(nèi)置的用于處理日期、時間和時間戳的方法。我們可以使用 time.time() 來獲取當(dāng)前時間戳。
import time
current_timestamp = time.time()
print("Current timestamp:", current_timestamp)
您將看到的輸出是自 1970 年 1 月 1 日以來經(jīng)過的確切秒數(shù)。
在 Python 中將時間戳轉(zhuǎn)換為時間字符串
對于那些無法使用秒計(jì)數(shù)器引用時間的人,我們有 Python datetime 模塊。datetime 模塊將這些秒轉(zhuǎn)換為我們可以理解的時間格式。
使用 datetime 模塊
datetime 是一個內(nèi)置的 Python 庫,它提供了用于操作日期的類。通過使用 datetime 模塊,我們可以使用相同的起始日期 1970 年 1 月 1 日,但將輸出轉(zhuǎn)換為日期(日歷日期)、一天中的時間、執(zhí)行時間算術(shù)、格式化和解析字符串,以及(正如我們上面所看到的)訪問時間戳。
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() 進(jìn)行格式化
與 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 是將日期和時間引入應(yīng)用程序的最常用方法。但這不是唯一的方法。Python 的 time 方法(我們一直在使用它來生成時間戳)也可以進(jìn)行轉(zhuǎn)換。
使用 time 模塊
time 模塊將時間戳轉(zhuǎn)換為可讀的結(jié)構(gòu),但被認(rèn)為有點(diǎn)低級且不太靈活(稍后會詳細(xì)介紹)。如果您只需要簡單的格式或需要與舊的 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 世紀(jì) 90 年代。time 模塊更簡單但更有限,尤其是在日期算術(shù)或識別時區(qū)等方面。
datetime 帶來了額外的功能,例如:
- 豐富的屬性(
year、month等) timedelta,用于處理日期數(shù)學(xué)- 更好的格式化和解析
- 更清晰的時區(qū)處理
datetime 沒有取代 time(正如您所看到的,我們的編碼示例中都使用了它),但 datetime 是顯示日期和時間的推薦方式。
time 仍然是將時間戳作為浮點(diǎn)數(shù)獲取的最快方法。您可以從 datetime 獲取時間戳,但正如您所看到的,它需要更多的代碼(因此 time = 更簡單):
from datetime import datetime timestamp = datetime.now().timestamp()
處理時區(qū)
默認(rèn)情況下,datetime.fromtimestamp() 使用運(yùn)行代碼的機(jī)器的本地時區(qū)。如果您在紐約的筆記本電腦上運(yùn)行此代碼,它將顯示東部時間。在德國的服務(wù)器上運(yùn)行相同的腳本將顯示中歐時間。
使用統(tǒng)一時區(qū)
假設(shè)您想為應(yīng)用程序的每個用戶顯示東部時間,無論他們身在何處。您可以使用 pytz 庫來做到這一點(diǎn)。在使用它之前,請確保 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"))
最佳實(shí)踐和常見陷阱
很多內(nèi)容已經(jīng)根據(jù)我們在示例中實(shí)踐的方式進(jìn)行了介紹(即,在指定時區(qū)之前轉(zhuǎn)換為 UTC)。其余的非常簡單,并遵循通常的編碼最佳實(shí)踐,例如在使用新代碼時使用 datetime 而不是 time。在整個項(xiàng)目中也使用一致的格式非常重要。
錯誤處理和故障排除
與最佳實(shí)踐類似,在使用 datetime 和 time 時,錯誤處理和故障排除沒有什么特別之處,只需確保變量名稱正確,在進(jìn)行轉(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 時間戳格式化允許您自定義時間字符串。
將紀(jì) 元時間轉(zhuǎn)換為人類可讀的日期很簡單,而像 pytz 這樣的工具可以幫助管理時區(qū)。掌握這些技術(shù)意味著可以自信地處理時間數(shù)據(jù),從而使 Python datetime 時間戳到字符串的轉(zhuǎn)換變得輕而易舉。
開始轉(zhuǎn)換,看看將 Unix 時間戳轉(zhuǎn)換為清晰、可讀的時間字符串有多么簡單!
以上就是使用Python將時間戳轉(zhuǎn)換為時間字符串的實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于Python時間戳轉(zhuǎn)時間字符串的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用sftp實(shí)現(xiàn)上傳和下載功能(實(shí)例代碼)
在Python中可以使用paramiko模塊中的sftp登陸遠(yuǎn)程主機(jī),實(shí)現(xiàn)上傳和下載功能。接下來通過本文給大家介紹Python使用sftp實(shí)現(xiàn)上傳和下載功能,需要的朋友參考下2017-03-03
如何用python獲取到照片拍攝時的詳細(xì)位置(附源碼)
其實(shí)我們平時拍攝的照片里,隱藏了大量的信息,下面這篇文章主要給大家介紹了關(guān)于如何用python獲取到照片拍攝時的詳細(xì)位置,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
python實(shí)現(xiàn)的正則表達(dá)式功能入門教程【經(jīng)典】
這篇文章主要介紹了python實(shí)現(xiàn)的正則表達(dá)式功能,詳細(xì)分析了Python正則表達(dá)式中常用的各種符號、函數(shù)等的使用方法與注意事項(xiàng),需要的朋友可以參考下2017-06-06
numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子
今天小編就為大家分享一篇numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python爬蟲實(shí)例——scrapy框架爬取拉勾網(wǎng)招聘信息
這篇文章主要介紹了Python爬蟲實(shí)例——scrapy框架爬取拉勾網(wǎng)招聘信息的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Python實(shí)現(xiàn)查找最小的k個數(shù)示例【兩種解法】
這篇文章主要介紹了Python實(shí)現(xiàn)查找最小的k個數(shù),結(jié)合實(shí)例形式對比分析了Python常見的兩種列表排序、查找相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
基于Python實(shí)現(xiàn)文件分類器的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)文件分類器,目的主要是為了將辦公過程中產(chǎn)生的各種格式的文件完成整理,感興趣的可以了解一下2023-04-04

