Python?time?模塊從時間表示到時間轉(zhuǎn)化的深度解析
開篇:時間處理的 “瑞士軍刀”
在 Python 開發(fā)中,時間處理是永恒的主題—— 無論是日志記錄、任務(wù)調(diào)度、數(shù)據(jù)分析還是 LLM 開發(fā)中的對話歷史時間戳,都離不開對時間的精確控制和轉(zhuǎn)化。Python 的time模塊就是處理時間的核心工具,它提供了:
- 時間的表示方式(時間戳、結(jié)構(gòu)化時間、字符串時間)
- 時間的轉(zhuǎn)化功能(時間戳→結(jié)構(gòu)化時間→字符串時間)
- 時間的計算功能(時間差、睡眠等)
- 時間的獲取功能(當前時間、CPU 時間等)
本文將系統(tǒng)性地解析 Python 的 time 模塊,從基礎(chǔ)的時間格式到復(fù)雜的時間轉(zhuǎn)化,從核心函數(shù)到實戰(zhàn)應(yīng)用,幫你全方位掌握 time 模塊的使用。
一、time 模塊的基礎(chǔ)認知
1.1 什么是 time 模塊?
time 模塊是 Python 標準庫中的時間處理模塊,提供了與時間相關(guān)的各種功能,包括時間的獲取、表示、轉(zhuǎn)化和計算等。
1.2 時間的三種表示方式
在 Python 中,時間主要有以下三種表示方式:
| 時間類型 | 含義 | 示例 |
|---|---|---|
| 時間戳 | 從 1970 年 1 月 1 日 00:00:00 UTC 開始經(jīng)過的秒數(shù) | 1635705600.0 |
| 結(jié)構(gòu)化時間 | 包含年、月、日、時、分、秒等時間字段的元組 | time.struct_time(tm_year=2021, tm_mon=11, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=305, tm_isdst=-1) |
| 字符串時間 | 可讀性強的字符串表示形式 | "2021-11-01 00:00:00" |
1.3 time 模塊的導(dǎo)入
import time
二、時間格式字符串詳解
時間格式字符串是用于將結(jié)構(gòu)化時間或時間戳轉(zhuǎn)化為字符串時間的模板,由普通字符和格式說明符組成。格式說明符以%開頭,用于指定時間字段的格式。
2.1 時間格式說明符表格
2.1.1 年份
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%Y | 4 位年份 | 2024 |
%y | 2 位年份 | 24 |
2.1.2 月份
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%m | 2 位月份(01-12) | 05 |
%b | 英文月份縮寫(Jan-Dec) | May |
%B | 英文月份全稱(January-December) | May |
2.1.3 日期
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%d | 2 位日期(01-31) | 15 |
%j | 1 年中的第幾天(001-366) | 135 |
2.1.4 星期
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%a | 英文星期縮寫(Mon-Sun) | Wed |
%A | 英文星期全稱(Monday-Sunday) | Wednesday |
%w | 星期幾(0-6,0 代表周日) | 3 |
%W | 1 年中的第幾周(00-53) | 20 |
%U | 1 年中的第幾周(00-53) | 20 |
2.1.5 時間
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%H | 24 小時制小時數(shù)(00-23) | 14 |
%I | 12 小時制小時數(shù)(01-12) | 02 |
%p | AM/PM | PM |
%M | 分鐘數(shù)(00-59) | 30 |
%S | 秒數(shù)(00-59) | 45 |
%f | 微秒數(shù)(000000-999999) | 123456 |
2.1.6 時區(qū)與時間戳
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%z | UTC 偏移量 | +0800 |
%Z | 時區(qū)名稱 | CST |
%c | 本地時間的字符串表示 | Wed May 15 14:30:45 2024 |
%x | 本地日期的字符串表示 | 05/15/24 |
%X | 本地時間的字符串表示 | 14:30:45 |
2.1.7 其他
| 格式說明符 | 含義 | 示例 |
|---|---|---|
%% | 百分號 | % |
三、time 模塊核心函數(shù)全解析
3.1 獲取時間相關(guān)的函數(shù)
3.1.1 time.time()
功能:獲取當前時間的時間戳(從 1970 年 1 月 1 日 00:00:00 UTC 開始經(jīng)過的秒數(shù))語法:time.time() -> float返回值:浮點數(shù)時間戳實戰(zhàn)案例:
import time
# 獲取當前時間戳
current_timestamp = time.time()
print(f"當前時間戳:{current_timestamp}")
# 輸出:當前時間戳:1715781045.1234563.1.2 time.localtime()
功能:將時間戳轉(zhuǎn)化為本地時間的結(jié)構(gòu)化時間語法:time.localtime([secs]) -> struct_time參數(shù):
secs:可選參數(shù),時間戳,默認為當前時間返回值:結(jié)構(gòu)化時間元組實戰(zhàn)案例:
import time
# 獲取當前本地時間的結(jié)構(gòu)化時間
local_time = time.localtime()
print(f"當前本地時間的結(jié)構(gòu)化時間:{local_time}")
# 輸出:當前本地時間的結(jié)構(gòu)化時間:time.struct_time(tm_year=2024, tm_mon=5, tm_mday=15, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=136, tm_isdst=0)3.1.3 time.gmtime()
功能:將時間戳轉(zhuǎn)化為 UTC 時間的結(jié)構(gòu)化時間語法:time.gmtime([secs]) -> struct_time參數(shù):
secs:可選參數(shù),時間戳,默認為當前時間返回值:結(jié)構(gòu)化時間元組實戰(zhàn)案例:
import time
# 獲取當前UTC時間的結(jié)構(gòu)化時間
utc_time = time.gmtime()
print(f"當前UTC時間的結(jié)構(gòu)化時間:{utc_time}")
# 輸出:當前UTC時間的結(jié)構(gòu)化時間:time.struct_time(tm_year=2024, tm_mon=5, tm_mday=15, tm_hour=6, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=136, tm_isdst=0)3.1.4 time.strftime()
功能:將結(jié)構(gòu)化時間轉(zhuǎn)化為字符串時間語法:time.strftime(format[, t]) -> str參數(shù):
format:時間格式字符串t:可選參數(shù),結(jié)構(gòu)化時間,默認為當前本地時間返回值:字符串時間實戰(zhàn)案例:
import time
# 將當前本地時間轉(zhuǎn)化為字符串時間
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
print(f"當前時間:{formatted_time}")
# 輸出:當前時間:2024-05-15 14:30:45
# 將指定的結(jié)構(gòu)化時間轉(zhuǎn)化為字符串時間
struct_time = time.struct_time(tm_year=2024, tm_mon=5, tm_mday=15, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=136, tm_isdst=0)
formatted_time = time.strftime("%B %d, %Y %I:%M:%S %p", struct_time)
print(f"格式化時間:{formatted_time}")
# 輸出:格式化時間:May 15, 2024 02:30:45 PM3.1.5 time.strptime()
功能:將字符串時間轉(zhuǎn)化為結(jié)構(gòu)化時間語法:time.strptime(string, format) -> struct_time參數(shù):
string:字符串時間format:時間格式字符串返回值:結(jié)構(gòu)化時間元組實戰(zhàn)案例:
import time
# 將字符串時間轉(zhuǎn)化為結(jié)構(gòu)化時間
string_time = "2024-05-15 14:30:45"
struct_time = time.strptime(string_time, "%Y-%m-%d %H:%M:%S")
print(f"結(jié)構(gòu)化時間:{struct_time}")
# 輸出:結(jié)構(gòu)化時間:time.struct_time(tm_year=2024, tm_mon=5, tm_mday=15, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=136, tm_isdst=-1)3.1.6 time.asctime()
功能:將結(jié)構(gòu)化時間轉(zhuǎn)化為可讀性強的字符串時間語法:time.asctime([t]) -> str參數(shù):
t:可選參數(shù),結(jié)構(gòu)化時間,默認為當前本地時間返回值:字符串時間實戰(zhàn)案例:
import time
# 將當前本地時間轉(zhuǎn)化為可讀性強的字符串時間
asctime = time.asctime()
print(f"當前時間:{asctime}")
# 輸出:當前時間:Wed May 15 14:30:45 20243.1.7 time.ctime()
功能:將時間戳轉(zhuǎn)化為可讀性強的字符串時間語法:time.ctime([secs]) -> str參數(shù):
secs:可選參數(shù),時間戳,默認為當前時間返回值:字符串時間實戰(zhàn)案例:
import time
# 將當前時間戳轉(zhuǎn)化為可讀性強的字符串時間
ctime = time.ctime()
print(f"當前時間:{ctime}")
# 輸出:當前時間:Wed May 15 14:30:45 20243.2 時間計算相關(guān)的函數(shù)
3.2.1 time.sleep()
功能:讓程序休眠指定的秒數(shù)語法:time.sleep(secs) -> None參數(shù):
secs:休眠的秒數(shù),可以是浮點數(shù)返回值:無實戰(zhàn)案例:
import time
print("開始執(zhí)行")
time.sleep(2) # 休眠2秒
print("執(zhí)行結(jié)束")
# 輸出:開始執(zhí)行
# 等待2秒后輸出:執(zhí)行結(jié)束3.2.2 time.clock()
功能:獲取 CPU 時間語法:time.clock() -> float返回值:浮點數(shù) CPU 時間說明:在 Python 3.8 + 中已被廢棄,建議使用time.process_time()或time.perf_counter()替代
3.2.3 time.process_time()
功能:獲取當前進程的 CPU 時間語法:time.process_time() -> float返回值:浮點數(shù) CPU 時間實戰(zhàn)案例:
import time
# 記錄開始時間
start_time = time.process_time()
# 執(zhí)行一段耗時的代碼
sum = 0
for i in range(1000000):
sum += i
# 記錄結(jié)束時間
end_time = time.process_time()
# 計算耗時
elapsed_time = end_time - start_time
print(f"耗時:{elapsed_time}秒")
# 輸出:耗時:0.015625秒3.2.4 time.perf_counter()
功能:獲取高精度計時器的時間語法:time.perf_counter() -> float返回值:浮點數(shù)時間實戰(zhàn)案例:
import time
# 記錄開始時間
start_time = time.perf_counter()
# 執(zhí)行一段耗時的代碼
time.sleep(0.5)
# 記錄結(jié)束時間
end_time = time.perf_counter()
# 計算耗時
elapsed_time = end_time - start_time
print(f"耗時:{elapsed_time}秒")
# 輸出:耗時:0.500123456秒3.2.5 time.time_ns()
功能:獲取當前時間的納秒時間戳語法:time.time_ns() -> int返回值:整數(shù)納秒時間戳實戰(zhàn)案例:
import time
# 獲取當前時間的納秒時間戳
time_ns = time.time_ns()
print(f"當前納秒時間戳:{time_ns}")
# 輸出:當前納秒時間戳:17157810451234567893.3 其他函數(shù)
3.3.1 time.tzset()
功能:設(shè)置當前時區(qū)語法:time.tzset() -> None返回值:無說明:僅在 Unix 系統(tǒng)上有效
3.3.2 time.gettimeofday()
功能:獲取當前時間和時區(qū)信息語法:time.gettimeofday() -> tuple返回值:包含秒和微秒的元組說明:僅在 Unix 系統(tǒng)上有效
四、time 模塊實戰(zhàn)應(yīng)用
4.1 時間轉(zhuǎn)化實戰(zhàn)
4.1.1 時間戳轉(zhuǎn)化為字符串時間
import time
# 獲取當前時間戳
timestamp = time.time()
# 轉(zhuǎn)化為格式化的字符串時間
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
print(f"時間戳 {timestamp} 轉(zhuǎn)化為字符串時間:{formatted_time}")4.1.2 字符串時間轉(zhuǎn)化為時間戳
import time
# 字符串時間
string_time = "2024-05-15 14:30:45"
# 轉(zhuǎn)化為結(jié)構(gòu)化時間
struct_time = time.strptime(string_time, "%Y-%m-%d %H:%M:%S")
# 轉(zhuǎn)化為時間戳
timestamp = time.mktime(struct_time)
print(f"字符串時間 {string_time} 轉(zhuǎn)化為時間戳:{timestamp}")4.1.3 結(jié)構(gòu)化時間轉(zhuǎn)化為字符串時間
import time
# 結(jié)構(gòu)化時間
struct_time = time.struct_time(tm_year=2024, tm_mon=5, tm_mday=15, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=2, tm_yday=136, tm_isdst=0)
# 轉(zhuǎn)化為格式化的字符串時間
formatted_time = time.strftime("%B %d, %Y %I:%M:%S %p", struct_time)
print(f"結(jié)構(gòu)化時間 {struct_time} 轉(zhuǎn)化為字符串時間:{formatted_time}")4.2 時間計算實戰(zhàn)
4.2.1 計算程序執(zhí)行時間
import time
# 記錄開始時間
start_time = time.perf_counter()
# 執(zhí)行一段耗時的代碼
sum = 0
for i in range(10000000):
sum += i
# 記錄結(jié)束時間
end_time = time.perf_counter()
# 計算耗時
elapsed_time = end_time - start_time
print(f"程序執(zhí)行時間:{elapsed_time}秒")4.2.2 實現(xiàn)定時任務(wù)
import time
def task():
print(f"任務(wù)執(zhí)行時間:{time.strftime('%Y-%m-%d %H:%M:%S')}")
# 每2秒執(zhí)行一次任務(wù)
while True:
task()
time.sleep(2)4.3 LLM 開發(fā)實戰(zhàn)
4.3.1 記錄對話歷史時間戳
import time
# LLM對話歷史
chat_history = []
def add_message(role, content):
message = {
"role": role,
"content": content,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
}
chat_history.append(message)
# 添加對話
add_message("user", "什么是LLM?")
add_message("assistant", "LLM是大語言模型的縮寫。")
# 打印對話歷史
for message in chat_history:
print(f"[{message['timestamp']}] {message['role']}: {message['content']}")
# 輸出:
# [2024-05-15 14:30:45] user: 什么是LLM?
# [2024-05-15 14:30:45] assistant: LLM是大語言模型的縮寫。4.3.2 統(tǒng)計 LLM 響應(yīng)時間
import time
import openai
from dotenv import load_dotenv
import os
# 加載API密鑰
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
def call_llm(prompt):
# 記錄開始時間
start_time = time.perf_counter()
# 調(diào)用LLM API
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
# 記錄結(jié)束時間
end_time = time.perf_counter()
# 計算響應(yīng)時間
response_time = end_time - start_time
# 提取回答
answer = response["choices"][0]["message"]["content"]
return answer, response_time
# 測試
prompt = "什么是LLM?"
answer, response_time = call_llm(prompt)
print(f"回答:{answer}")
print(f"響應(yīng)時間:{response_time}秒")五、常見問題與解決方案
5.1 時間格式轉(zhuǎn)化錯誤
問題:在使用time.strptime()轉(zhuǎn)化字符串時間時提示ValueError: time data '2024/05/15' does not match format '%Y-%m-%d'。解決方案:確保時間格式字符串與字符串時間的格式一致。例如,將%Y-%m-%d改為%Y/%m/%d。
5.2 時區(qū)問題
問題:在不同的時區(qū)下,時間戳轉(zhuǎn)化為字符串時間的結(jié)果不同。解決方案:使用time.gmtime()獲取 UTC 時間,或使用datetime模塊處理時區(qū)。
5.3 時間戳精度問題
問題:在 Python 2.x 中,time.time()返回的是整數(shù)時間戳,而在 Python 3.x 中返回的是浮點數(shù)時間戳。解決方案:在 Python 2.x 中,可以使用time.time()結(jié)合time.sleep()實現(xiàn)高精度時間。
5.4 字符串時間轉(zhuǎn)時間戳的時區(qū)問題
問題:在使用time.mktime()轉(zhuǎn)化結(jié)構(gòu)化時間為時間戳?xí)r,會自動添加本地時區(qū)。解決方案:使用datetime模塊的datetime.timestamp()方法。
六、time 模塊與 datetime 模塊的對比
| 模塊 | 功能 | 特點 |
|---|---|---|
time | 時間的獲取、表示、轉(zhuǎn)化和計算 | 功能基礎(chǔ),適合處理簡單的時間問題 |
datetime | 時間和日期的處理 | 功能強大,支持時區(qū)、日期計算等 |
建議:
- 對于簡單的時間處理,使用
time模塊 - 對于復(fù)雜的時間處理(如時區(qū)、日期計算等),使用
datetime模塊
七、總結(jié):time 模塊的核心價值
time 模塊是 Python 中處理時間的核心工具,它提供了時間的表示、轉(zhuǎn)化、計算和獲取等功能。通過本文的學(xué)習(xí),你已經(jīng)掌握了 time 模塊的所有核心函數(shù)和時間格式字符串的用法,并結(jié)合實戰(zhàn)案例進行了深入的應(yīng)用。
在實際開發(fā)中,要注意以下幾點:
- 選擇合適的時間表示方式
- 確保時間格式字符串與字符串時間的格式一致
- 注意時區(qū)問題
- 對于復(fù)雜的時間處理,使用 datetime 模塊
time 模塊雖然功能基礎(chǔ),但卻是 Python 開發(fā)中不可或缺的工具。掌握它的使用,可以幫助你在日志記錄、任務(wù)調(diào)度、數(shù)據(jù)分析和 LLM 開發(fā)等領(lǐng)域中更加高效地處理時間問題。
到此這篇關(guān)于Python time 模塊深度解析:從時間表示到時間轉(zhuǎn)化的全指南的文章就介紹到這了,更多相關(guān)Python time 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)類型詳解(內(nèi)置數(shù)據(jù)容器)
在?Python?中,字典(dict)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對,這篇文章給大家介紹Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)類型詳解(內(nèi)置數(shù)據(jù)容器),感興趣的朋友一起看看吧2025-04-04
Tornado協(xié)程在python2.7如何返回值(實現(xiàn)方法)
下面小編就為大家?guī)硪黄猅ornado協(xié)程在python2.7如何返回值(實現(xiàn)方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
python中小數(shù)點后取2位(四舍五入)及取2位(四舍五不入)的方法
這篇文章主要給大家介紹了python中小數(shù)點后取2位(四舍五入)及取2位(四舍五不入)的方法,在Python中取兩位小數(shù)的方法其實非常簡單,需要的朋友可以參考下2023-08-08
Python探索之靜態(tài)方法和類方法的區(qū)別詳解
這篇文章主要介紹了Python探索之靜態(tài)方法和類方法的區(qū)別詳解,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10
Python使用pylab庫實現(xiàn)繪制直方圖功能示例
這篇文章主要介紹了Python使用pylab庫實現(xiàn)繪制直方圖功能,結(jié)合實例形式分析了Python數(shù)據(jù)讀取、遍歷以及基于pylab庫繪制直方圖的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
Pytorch使用技巧之Dataloader中的collate_fn參數(shù)詳析
collate_fn 參數(shù)的目的主要是為了隨心所欲的轉(zhuǎn)變數(shù)據(jù)的類型,這個數(shù)據(jù)是用DataLoader加載的,比如img,target,下面這篇文章主要給大家介紹了關(guān)于Pytorch使用技巧之Dataloader中的collate_fn參數(shù)的相關(guān)資料,需要的朋友可以參考下2022-03-03
在pycharm中調(diào)試fastapi應(yīng)用程序的流程步驟
? FastAPI 是一個現(xiàn)代、快速(高性能)的 Web 框架,用于構(gòu)建基于 Python 的 API,它具有簡單易用的特性,同時也提供了高度自動化的文檔生成功能,本文給大家介紹了在pycharm中調(diào)試fastapi應(yīng)用程序的流程步驟,需要的朋友可以參考下2024-12-12

