日期和时间处理在日常开发中非常常见和重要,在 Python 中,可以通过 time 和 datetime 模块处理时间、日期、时间戳、格式化等。其中:
time 模块:偏底层,处理时间戳、程序计时、系统时间,适合精确计时、延时操作。
datetime 模块:偏上层,封装更友好,处理日期、时间、时间差、日期计算,日常用得最多。
time 模块是 Python 内置的标准时间处理模块,无需额外安装即可直接调用。主要用于时间获取、格式转换、程序休眠与性能计时。
该模块以 Unix 时间戳为核心,支持获取当前时间戳、本地与 UTC 结构化时间,可完成时间戳与可读时间格式的相互转换,还能通过 sleep 函数实现程序暂停,借助 perf_counter 等函数完成高精度计时,常被用于日志记录、定时任务、接口重试等待、代码耗时统计等场景。
常用方法:
time.time() 获取当前时间戳(1970-01-01 到现在的秒数)
time.sleep(秒) 程序暂停 / 延时
time.localtime() 时间戳 → 本地时间结构体
time.gmtime() 时间戳 → UTC 时间结构体
time.strftime() 时间结构体 → 自定义格式化字符串
time.strptime() 时间字符串 → 时间结构体
time.perf_counter() 高精度程序计时
常用格式化符号:
%Y:年(4 位)
%m:月(2 位)
%d:日
%H:时(24 小时制)
%M:分
%S:秒
(1)获取当前时间戳
import time
ts = time.time()
print("当前时间戳:", ts)运行结果:
当前时间戳: 1776675682.9656248(2)程序延时
import time
# 程序延时
print("开始等待 2 秒...")
time.sleep(2)
print("等待结束")运行结果:
开始等待 2 秒...
等待结束(3) 将时间戳转换为本地时间对象
import time
# 获取当前时间戳(最常用)
ts = time.time()
# 转换为本地时间对象
local_time = time.localtime(ts)
print("本地时间结构体:", local_time)
print("年:", local_time.tm_year)
print("月:", local_time.tm_mon)运行结果:
本地时间结构体: time.struct_time(tm_year=2026, tm_mon=4, tm_mday=20, tm_hour=17, tm_min=3, tm_sec=27, tm_wday=0, tm_yday=110, tm_isdst=0)
年: 2026
月: 4(4)时间格式化输出
import time
ts = time.time()
local_time = time.localtime(ts)
format_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print("格式化时间:", format_time)运行结果:
格式化时间: 2026-04-20 17:04:35(5)字符串转时间
import time
time_str = "2025-12-25 18:30:00"
time_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print("字符串转时间结构体:", time_struct)运行结果:
字符串转时间结构体: time.struct_time(tm_year=2025, tm_mon=12, tm_mday=25, tm_hour=18, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=359, tm_isdst=-1)(6)
import time
start = time.perf_counter()
time.sleep(0.5) # 模拟耗时
end = time.perf_counter()
print(f"代码耗时:{end - start:.4f} 秒")运行结果:
代码耗时:0.5005 秒更多关于 time 模块的信息,请参考 https://docs.python.org/3/library/time.html 官方参考文档。
datetime 模块是 Python 中用于处理日期与时间的内置模块,它能够高效地完成日期、时间的创建、计算、格式化以及转换等常见操作。
该模块整合了多个实用的类,其中最常用的包括 date 类、time 类、datetime 类以及 timedelta 类,分别用于单独处理日期信息、时间信息、处理日期和时间,以及计算两个时间点之间的时间差值。
借助 datetime 模块,开发者可以便捷地获取当前系统日期时间、对日期进行加减运算、将字符串与日期对象相互转换,还能规范日期时间的显示格式。
注意,datetime 是面向对象的模块,包含 4 个常用类:
datetime:日期 + 时间
date:仅日期
time:仅时间
timedelta:时间差(日期加减)
datetime 模块的常用方法如下:
datetime.now() 当前日期时间
datetime.today() 当前日期时间
datetime.utcnow() UTC 时间
dt.timestamp() 转时间戳
datetime.fromtimestamp(ts) 时间戳 → datetime
dt.strftime() 格式化字符串
datetime.strptime() 字符串转 datetime
timedelta(days=, hours=) 时间加减
(1)获取当前日期时间
from datetime import datetime, date, time, timedelta
now = datetime.now()
print("当前时间:", now)
print("年:", now.year)
print("月:", now.month)
print("时:", now.hour)运行结果:
当前时间: 2026-04-20 17:14:20.378719
年: 2026
月: 4
时: 17(2)格式化输出
from datetime import datetime, date, time, timedelta
now = datetime.now()
str_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化:", str_time)运行结果:
格式化: 2026-04-20 17:15:26(3)字符串转 datetime
from datetime import datetime, date, time, timedelta
dt = datetime.strptime("2025-10-01 12:00:00", "%Y-%m-%d %H:%M:%S")
print("字符串转时间:", dt)运行结果:
字符串转时间: 2025-10-01 12:00:00(4)datetime 和时间戳互转
from datetime import datetime, date, time, timedelta
# 获取当前日期时间
now = datetime.now()
ts = now.timestamp()
print("转时间戳:", ts)
dt2 = datetime.fromtimestamp(ts)
print("时间戳转回:", dt2)运行结果:
转时间戳: 1776676695.433652
时间戳转回: 2026-04-20 17:18:15.433652(5)时间加减
from datetime import datetime, date, time, timedelta
# 获取当前日期时间
now = datetime.now()
# 加 3 天
after_3d = now + timedelta(days=3)
print("3天后:", after_3d)
# 减 2 小时 30 分钟
before = now - timedelta(hours=2, minutes=30)
print("2小时30分钟前:", before)运行结果:
3天后: 2026-04-23 17:19:43.182177
2小时30分钟前: 2026-04-20 14:49:43.182177(6) 单独使用 date / time
from datetime import date, time
today = date.today()
print("今天日期:", today)
t = time(14, 30, 59)
print("时间:", t)运行结果:
今天日期: 2026-04-20
时间: 14:30:59更多关于 datetime 模块的信息,请参考 https://docs.python.org/3/library/datetime.html 官方参考文档。
下面通过一个示例演示 time 和 datetime 互转,例如:
import time
from datetime import datetime
# datetime → 时间戳
now = datetime.now()
ts = now.timestamp()
print(ts)
# 时间戳 → datetime
dt = datetime.fromtimestamp(ts)
print(dt)
# datetime → time 结构体
struct = now.timetuple()
print(struct)
# time 结构体 → datetime
dt2 = datetime.fromtimestamp(time.mktime(struct))
print(dt2)运行结果:
1776677027.515607
2026-04-20 17:23:47.515607
time.struct_time(tm_year=2026, tm_mon=4, tm_mday=20, tm_hour=17, tm_min=23, tm_sec=47, tm_wday=0, tm_yday=110, tm_isdst=-1)
2026-04-20 17:23:47该示例将获取当前时间,生成带时间戳的日志文件名,并且计算距离指定节日还有多少天,最后格式化输出倒计时。
完整代码:
from datetime import datetime, timedelta
def time_tool():
# 1. 当前时间
now = datetime.now()
print("📅 当前时间:", now.strftime("%Y-%m-%d %H:%M:%S"))
# 2. 生成日志文件名
log_name = now.strftime("log_%Y%m%d_%H%M%S.txt")
print("📄 日志文件名:", log_name)
# 3. 目标时间:2025-12-25
target = datetime(2025, 12, 25, 0, 0, 0)
# 4. 计算时间差
delta = target - now
days = delta.days
seconds = delta.seconds
hours = seconds // 3600
minutes = (seconds % 3600) // 60
print(f"🎄 距离圣诞节还有:{days}天 {hours}小时 {minutes}分钟")
# 5. 7天后的时间
after_7d = now + timedelta(days=7)
print("🗓️ 7天后日期:", after_7d.strftime("%Y-%m-%d"))
# 运行工具
if __name__ == "__main__":
time_tool()运行效果
📅 当前时间: 2026-04-20 17:28:39
📄 日志文件名: log_20260420_172839.txt
🎄 距离圣诞节还有:-117天 6小时 31分钟
🗓️ 7天后日期: 2026-04-27