iis怎么建網(wǎng)站最新的網(wǎng)絡營銷的案例
Langchain系列文章目錄
01-玩轉LangChain:從模型調(diào)用到Prompt模板與輸出解析的完整指南
02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋
03-全面掌握 LangChain:從核心鏈條構建到動態(tài)任務分配的實戰(zhàn)指南
04-玩轉 LangChain:從文檔加載到高效問答系統(tǒng)構建的全程實戰(zhàn)
05-玩轉 LangChain:深度評估問答系統(tǒng)的三種高效方法(示例生成、手動評估與LLM輔助評估)
06-從 0 到 1 掌握 LangChain Agents:自定義工具 + LLM 打造智能工作流!
07-【深度解析】從GPT-1到GPT-4:ChatGPT背后的核心原理全揭秘
08-【萬字長文】MCP深度解析:打通AI與世界的“USB-C”,模型上下文協(xié)議原理、實踐與未來
Python系列文章目錄
PyTorch系列文章目錄
機器學習系列文章目錄
深度學習系列文章目錄
Java系列文章目錄
JavaScript系列文章目錄
Python系列文章目錄
01-【Python-Day 1】告別編程恐懼:輕松掌握 Python 安裝與第一個程序的 6 個步驟
02-【Python-Day 2】掌握Python基石:變量、內(nèi)存、標識符及int/float/bool數(shù)據(jù)類型
03-【Python-Day 3】玩轉文本:字符串(String)基礎操作詳解 (上)
04-【Python-Day 4】玩轉文本:Python 字符串常用方法深度解析 (下篇)
05-【Python-Day 5】Python 格式化輸出實戰(zhàn):%、format()、f-string 對比與最佳實踐
06- 【Python-Day 6】從零精通 Python 運算符(上):算術、賦值與比較運算全解析
07-【Python-Day 7】從零精通 Python 運算符(下):邏輯、成員、身份運算與優(yōu)先級規(guī)則全解析
08-【Python-Day 8】從入門到精通:Python 條件判斷 if-elif-else 語句全解析
09-【Python-Day 9】掌握循環(huán)利器:for 循環(huán)遍歷序列與可迭代對象詳解
10-【Python-Day 10】Python 循環(huán)控制流:while 循環(huán)詳解與 for 循環(huán)對比
11-【Python-Day 11】列表入門:Python 中最靈活的數(shù)據(jù)容器 (創(chuàng)建、索引、切片)
12-【Python-Day 12】Python列表進階:玩轉添加、刪除、排序與列表推導式
13-【Python-Day 13】Python 元組 (Tuple) 詳解:從創(chuàng)建、操作到高級應用場景一網(wǎng)打盡
14-【Python-Day 14】玩轉Python字典(上篇):從零開始學習創(chuàng)建、訪問與操作
15-【Python-Day 15】深入探索 Python 字典 (下):常用方法、遍歷、推導式與嵌套實戰(zhàn)
16-【Python-Day 16】代碼復用基石:詳解 Python 函數(shù)的定義與調(diào)用
17-【Python-Day 17】玩轉函數(shù)參數(shù)(上):輕松掌握位置、關鍵字和默認值
18-【Python-Day 18】玩轉函數(shù)參數(shù)(下):*args 與 **kwargs 終極指南
19-【Python-Day 19】函數(shù)的回響:深入理解 return
語句與返回值
20-【Python-Day 20】揭秘Python變量作用域:LEGB規(guī)則與global/nonlocal關鍵字詳解
21-【Python-Day 21】一行搞定!Python lambda 匿名函數(shù)的妙用與實戰(zhàn)
22-【Python-Day 22】代碼的基石:模塊(Module)的導入與使用詳解
23-【Python-Day 23】Python 模塊化編程實戰(zhàn):創(chuàng)建、導入及 sys.path 深度解析
24-【Python-Day 24】告別雜亂代碼!一文掌握 Python 包(Package)的創(chuàng)建與使用
25-【Python-Day 25】玩轉數(shù)字:精通 math 與 random 模塊,從數(shù)學運算到隨機抽樣
26-【Python-Day 26】解鎖時間魔法:深入解析 time 與 datetime 模塊
文章目錄
- Langchain系列文章目錄
- Python系列文章目錄
- PyTorch系列文章目錄
- 機器學習系列文章目錄
- 深度學習系列文章目錄
- Java系列文章目錄
- JavaScript系列文章目錄
- Python系列文章目錄
- 前言
- 一、time 模塊:時間的使者
- 1.1 時間戳 (Timestamp)
- (1) 什么是時間戳?
- (2) 獲取當前時間戳
- 1.2 時間元組 (struct_time)
- (1) 獲取本地時間元組
- (2) 獲取 UTC 時間元組
- 1.3 時間格式化與解析
- (1) 格式化:從 `struct_time` 到字符串
- (2) 解析:從字符串到 `struct_time`
- 1.4 實用函數(shù) `time.sleep()`
- 二、datetime 模塊:時間的高級管家
- 2.1 `datetime` 模塊的核心對象
- 2.1.1 `date` 對象:專注日期
- 2.1.2 `time` 對象:專注時間
- 2.1.3 `datetime` 對象:日期與時間的結合體
- (1) 創(chuàng)建 `datetime` 對象
- (2) `datetime` 對象與時間戳的轉換
- 2.2 時間的“加減法”:`timedelta` 對象
- 2.3 `datetime` 的格式化與解析
- 三、time 與 datetime 的抉擇
- 四、實戰(zhàn)演練:一個簡單的倒計時程序
- 五、總結
前言
在編程世界里,時間不僅僅是墻上的時鐘,它更是日志記錄、數(shù)據(jù)分析、任務調(diào)度等無數(shù)應用場景的核心。無論是計算一個操作耗時多久,還是處理用戶的生日信息,亦或是安排一個定時任務,我們都離不開對日期和時間的精準操控。Python 提供了功能強大的內(nèi)建模塊來處理這些需求,其中最核心的兩個就是 time
和 datetime
。本文將帶你系統(tǒng)地學習這兩個模塊,從基礎概念到高級應用,讓你徹底掌握在 Python 中駕馭時間的魔法。
一、time 模塊:時間的使者
time
模塊提供了主要與 UNIX 時間戳(Unix Timestamp)交互的底層函數(shù)。它更接近操作系統(tǒng)層面,適合用于獲取時間戳、程序計時等場景。
1.1 時間戳 (Timestamp)
(1) 什么是時間戳?
時間戳是一種表示時間的方式,它指的是從一個固定的“紀元”(Epoch)開始,到當前時刻所經(jīng)過的秒數(shù)。在大多數(shù)系統(tǒng)中,這個紀元被定義為 1970年1月1日00:00:00 (UTC)。時間戳是一個浮點數(shù),可以精確到微秒。它不關心時區(qū),是一種絕對的時間表示。
(2) 獲取當前時間戳
使用 time.time()
函數(shù)可以輕松獲取當前的 Unix 時間戳。
import time# 獲取當前時間戳
current_timestamp = time.time()
print(f"當前的時間戳是: {current_timestamp}")
# 輸出: 當前的時間戳是: 1718270425.123456 (這個值會隨時間變化)
應用場景:非常適合用來計算代碼執(zhí)行耗時。
start_time = time.time()# 模擬一個耗時操作
sum = 0
for i in range(1000000):sum += iend_time = time.time()print(f"代碼塊執(zhí)行耗時: {end_time - start_time} 秒")
1.2 時間元組 (struct_time)
時間戳雖然精確,但對人類來說可讀性很差。time
模塊使用一個名為 time.struct_time
的元組對象來更結構化地表示時間。它包含9個元素:
索引 | 屬性名 | 值范圍 |
---|---|---|
0 | tm_year | (例如, 2025) |
1 | tm_mon | 1 到 12 |
2 | tm_mday | 1 到 31 |
3 | tm_hour | 0 到 23 |
4 | tm_min | 0 到 59 |
5 | tm_sec | 0 到 61 (考慮閏秒) |
6 | tm_wday | 0 到 6 (周一為0) |
7 | tm_yday | 1 到 366 (一年中的第幾天) |
8 | tm_isdst | 0, 1, -1 (是否夏令時) |
(1) 獲取本地時間元組
time.localtime()
函數(shù)可以將一個時間戳轉換成本地時區(qū)的 struct_time
。如果不提供參數(shù),則默認使用當前時間戳。
# 獲取本地時間的 struct_time
local_time_struct = time.localtime()
print(f"本地時間元組: {local_time_struct}")
print(f"今年是: {local_time_struct.tm_year} 年")
print(f"今天是本周的第 {local_time_struct.tm_wday + 1} 天")
(2) 獲取 UTC 時間元組
time.gmtime()
功能類似,但它返回的是 UTC (協(xié)調(diào)世界時,也稱格林威治標準時間) 的 struct_time
。
# 獲取 UTC 時間的 struct_time
utc_time_struct = time.gmtime()
print(f"UTC 時間元組: {utc_time_struct}")
1.3 時間格式化與解析
time
模塊中最實用的功能之一就是將時間在“結構化對象”和“字符串”之間來回轉換。
(1) 格式化:從 struct_time
到字符串
time.strftime(format, t)
函數(shù)可以將一個 struct_time
對象(參數(shù) t
)按照指定的格式(參數(shù) format
)轉換成一個字符串。
local_time_struct = time.localtime()# 格式化成 "年-月-日 時:分:秒"
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time_struct)
print(f"格式化后的本地時間: {formatted_time}")
# 輸出: 格式化后的本地時間: 2025-06-13 05:00:25 (示例)
(2) 解析:從字符串到 struct_time
time.strptime(string, format)
函數(shù)是 strftime
的逆操作,它可以將一個字符串(參數(shù) string
)按照指定的格式(參數(shù) format
)解析成一個 struct_time
對象。
time_string = "2025-10-01 08:30:00"
format_pattern = "%Y-%m-%d %H:%M:%S"# 將字符串解析為 struct_time
parsed_time_struct = time.strptime(time_string, format_pattern)
print(f"解析后的時間元組: {parsed_time_struct}")
print(f"解析出的年份是: {parsed_time_struct.tm_year}")
注意:解析時,字符串的格式必須與 format
參數(shù)嚴格匹配,否則會拋出 ValueError
異常。
1.4 實用函數(shù) time.sleep()
time.sleep(secs)
函數(shù)可以讓當前程序的執(zhí)行暫停指定的秒數(shù)(secs
可以是浮點數(shù),以實現(xiàn)毫秒級的暫停)。
print("程序開始...")
time.sleep(2.5) # 暫停 2.5 秒
print("2.5 秒后,程序繼續(xù)執(zhí)行!")
二、datetime 模塊:時間的高級管家
如果說 time
模塊是處理時間的基礎工具,那么 datetime
模塊就是功能更強大、設計更現(xiàn)代的“時間瑞士軍刀”。它以面向對象的方式封裝了日期和時間的處理,使用起來更直觀、更方便。
2.1 datetime
模塊的核心對象
datetime
模塊主要包含以下幾個核心類:
date
:表示日期(年、月、日)。time
:表示時間(時、分、秒、微秒)。datetime
:表示日期和時間(年、月、日、時、分、秒、微秒)。timedelta
:表示兩個date
、time
或datetime
對象之間的時間差。
2.1.1 date
對象:專注日期
date
對象只關心年、月、日。
from datetime import date# 創(chuàng)建一個 date 對象
d = date(2025, 10, 1)
print(f"日期對象: {d}")
print(f"年份: {d.year}, 月份: {d.month}, 日: {d.day}")# 獲取今天的 date 對象
today = date.today()
print(f"今天是: {today}")
2.1.2 time
對象:專注時間
time
對象只關心時、分、秒、微秒,與日期無關。
from datetime import time# 創(chuàng)建一個 time 對象
t = time(14, 30, 55, 123456)
print(f"時間對象: {t}")
print(f"小時: {t.hour}, 分鐘: {t.minute}, 秒: {t.second}, 微秒: {t.microsecond}")
2.1.3 datetime
對象:日期與時間的結合體
這是最常用的對象,它包含了 date
和 time
的所有信息。
(1) 創(chuàng)建 datetime
對象
from datetime import datetime# 直接創(chuàng)建
dt = datetime(2025, 10, 1, 10, 30, 0)
print(f"創(chuàng)建的 datetime 對象: {dt}")# 獲取當前本地日期和時間
now = datetime.now()
print(f"當前本地時間: {now}")# 獲取當前 UTC 日期和時間
utcnow = datetime.utcnow()
print(f"當前 UTC 時間: {utcnow}")
(2) datetime
對象與時間戳的轉換
datetime
對象可以輕松地與時間戳進行互換。
from datetime import datetime# 獲取當前時間
now = datetime.now()
print(f"當前時間對象: {now}")# datetime 對象 -> 時間戳
timestamp = now.timestamp()
print(f"轉換后的時間戳: {timestamp}")# 時間戳 -> datetime 對象
dt_from_ts = datetime.fromtimestamp(timestamp)
print(f"從時間戳恢復的時間對象: {dt_from_ts}")
2.2 時間的“加減法”:timedelta
對象
timedelta
對象是 datetime
模塊的一大亮點,它代表一個時間段或持續(xù)時間,讓日期時間的計算變得異常簡單。
from datetime import datetime, timedelta# 獲取當前時間
now = datetime.now()
print(f"當前時間: {now}")# 創(chuàng)建一個表示“1天12小時”的時間差
delta = timedelta(days=1, hours=12)# 計算未來時間
future_time = now + delta
print(f"1天12小時后: {future_time}")# 計算過去時間
past_time = now - delta
print(f"1天12小時前: {past_time}")# 計算兩個 datetime 對象的時間差
dt1 = datetime(2025, 1, 1)
dt2 = datetime(2025, 1, 31)
diff = dt2 - dt1
print(f"兩個日期相差: {diff.days} 天")
2.3 datetime
的格式化與解析
datetime
對象也擁有 strftime
方法用于格式化,同時 datetime
類也提供了 strptime
類方法用于解析,用法與 time
模塊中的版本非常相似。
from datetime import datetimenow = datetime.now()# 格式化:datetime 對象 -> 字符串
formatted_dt = now.strftime("%Y/%m/%d %A %I:%M %p")
print(f"格式化后的 datetime: {formatted_dt}")
# 輸出示例: 格式化后的 datetime: 2025/06/13 Friday 05:00 AM# 解析:字符串 -> datetime 對象
date_str = "2025-12-25 18:00:00"
dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"從字符串解析的 datetime: {dt_obj}")
三、time 與 datetime 的抉擇
初學者可能會困惑,何時使用 time
,何時使用 datetime
?下面這張圖和表格可以幫助你理清思路。
graph TDA[時間處理需求] --> B{需要進行日期計算或處理具體日期嗎?};B -- 是 --> C[使用 `datetime` 模塊];B -- 否 --> D{是否主要處理時間戳或程序計時?};D -- 是 --> E[使用 `time` 模塊];D -- 否 --> F[重新評估需求, `datetime` 通常更通用];C --> C1[創(chuàng)建 `date`, `time`, `datetime` 對象];C --> C2[使用 `timedelta` 進行加減];C --> C3[使用 `strftime`/`strptime`];E --> E1[獲取時間戳 `time.time()`];E --> E2[程序暫停 `time.sleep()`];E --> E3[與 `struct_time` 轉換];
特性 | time 模塊 | datetime 模塊 | 選擇建議 |
---|---|---|---|
核心 | 面向過程,函數(shù)驅動 | 面向對象,通過 date , time , datetime 對象操作 | 優(yōu)先選擇 datetime ,除非有特定需求。 |
數(shù)據(jù)模型 | 時間戳 (浮點數(shù)) 和 struct_time (元組) | 功能豐富的 date , time , datetime , timedelta 對象 | datetime 的對象模型更直觀,易于理解和使用。 |
功能范圍 | 基礎的時間獲取、格式化、轉換、程序暫停 | 涵蓋 time 的功能,并增加了強大的日期時間算術運算 | 需要日期計算(如加減天數(shù))時,必須使用 datetime 。 |
時區(qū)處理 | 時區(qū)支持有限,主要依賴本地時區(qū)和 UTC | 提供了對時區(qū)信息(tzinfo )的更好支持(雖然需要配合第三方庫如pytz ) | 對于復雜的時區(qū)應用,datetime 是基礎。 |
典型場景 | 計算代碼執(zhí)行時間、生成與系統(tǒng)底層兼容的時間戳、sleep | 日志記錄、數(shù)據(jù)分析、Web 應用、任務調(diào)度、任何需要處理具體日期和時間的場景 | 日常開發(fā)和應用層編程,95% 的情況應使用 datetime 。 |
四、實戰(zhàn)演練:一個簡單的倒計時程序
讓我們用 datetime
和 time
模塊的知識來編寫一個實用的倒計時程序。
from datetime import datetime
import timedef countdown(target_date_str):"""一個簡單的倒計時函數(shù):param target_date_str: 目標日期字符串,格式為 "YYYY-MM-DD HH:MM:SS""""try:# 1. 使用 datetime.strptime 解析目標日期字符串為 datetime 對象target_date = datetime.strptime(target_date_str, "%Y-%m-%d %H:%M:%S")print(f"目標時間: {target_date.strftime('%Y年%m月%d日 %H:%M:%S')}")print("倒計時開始!")# 2. 循環(huán)直到當前時間超過目標時間while True:# 獲取當前時間now = datetime.now()# 如果當前時間已超過目標,則結束if now >= target_date:print("\n時間到!")break# 3. 使用 timedelta 計算剩余時間remaining = target_date - now# 為了更清晰地顯示,我們手動計算天、時、分、秒# remaining.total_seconds() 返回總秒數(shù)total_seconds = int(remaining.total_seconds())days, rem_seconds = divmod(total_seconds, 86400) # 86400 = 24 * 60 * 60hours, rem_seconds = divmod(rem_seconds, 3600) # 3600 = 60 * 60minutes, seconds = divmod(rem_seconds, 60)# 4. 使用 \r 實現(xiàn)單行刷新,\r 表示回車,將光標移到行首print(f"\r剩余時間: {days} 天 {hours:02d} 時 {minutes:02d} 分 {seconds:02d} 秒", end="")# 5. 使用 time.sleep(1) 每秒刷新一次time.sleep(1)except ValueError:print("錯誤:日期格式不正確!請輸入 'YYYY-MM-DD HH:MM:SS' 格式。")# --- 程序入口 ---
if __name__ == "__main__":# 設置一個未來的時間點作為倒計時目標target = "2026-01-01 00:00:00"countdown(target)
這個例子完美地結合了兩個模塊的優(yōu)點:使用 datetime
進行精準的日期解析和時間差計算,使用 time.sleep()
控制程序的執(zhí)行節(jié)奏。
五、總結
恭喜你,完成了對 Python 時間處理核心模塊的學習!現(xiàn)在,讓我們回顧一下今天的核心知識點:
-
time
模塊:是 Python 處理時間的基礎模塊,更接近底層。它的核心是 Unix 時間戳 (time.time()
) 和 時間元組 (struct_time
)。主要用于獲取時間戳、程序計時 (time.sleep()
) 以及基礎的格式化 (strftime
) 和解析 (strptime
)。 -
datetime
模塊:是更高級、更推薦的面向對象的時間處理模塊。它提供了date
,time
,datetime
等直觀的對象來表示日期和時間。 -
核心對象:
datetime.datetime
是最常用的對象,它不僅可以表示精確到微秒的日期時間,還能方便地與時間戳進行轉換。 -
timedelta
:是datetime
模塊的王牌功能,它代表一個時間間隔,使得日期和時間的加減運算變得像整數(shù)運算一樣簡單,是處理日期計算的關鍵。 -
格式化與解析:
strftime
用于將時間對象轉換為人類可讀的字符串,而strptime
則反向將字符串解析為時間對象。這是處理時間數(shù)據(jù)輸入輸出的必備技能。 -
選擇策略:在絕大多數(shù)應用開發(fā)中,優(yōu)先使用
datetime
模塊。只有在需要進行底層時間戳操作或簡單的程序計時時,才考慮使用time
模塊。
掌握了 time
和 datetime
,你就擁有了在代碼中操控時間流的能力。無論是記錄事件發(fā)生的瞬間,還是預測未來的某個時刻,你都將游刃有余。繼續(xù)練習,將這些知識應用到你的項目中去吧!