Python datetime 与 time
Python datetime 与 time 的完整教学讲解。
datetime 基本创建
基本写法:创建日期
datetime.date(<年>, <月>, <日>)
# 创建日期对象
from datetime import date
d = date(2024, 7, 31)
print(d) # 2024-07-31
基本写法:创建时间
datetime.time(<时>, <分>, [秒], [微秒])
# 创建时间对象
from datetime import time
t = time(14, 30, 0)
print(t) # 14:30:00
基本写法:创建日期时间
datetime.datetime(<年>, <月>, <日>, <时>, <分>, <秒>)
# 创建日期时间对象
from datetime import datetime
dt = datetime(2024, 7, 31, 14, 30, 0)
基本写法:获取当前日期时间
datetime.now()
# 获取本地当前日期时间
now = datetime.now()
基本写法:获取当前日期
date.today()
# 获取当前日期
today = date.today()
基本写法:获取 UTC 当前时间
datetime.now(tz=timezone.utc)
# 获取 UTC 时区当前时间
from datetime import timezone
utc_now = datetime.now(tz=timezone.utc)
datetime 从字符串解析
基本写法:解析日期时间字符串
datetime.strptime(<字符串>, <格式>)
# 按格式解析字符串
from datetime import datetime
dt = datetime.strptime("2024-07-31 14:30", "%Y-%m-%d %H:%M")
基本写法:格式化输出
<日期>.strftime(<格式>)
# 格式化为字符串
now = datetime.now()
s = now.strftime("%Y年%m月%d日 %H:%M:%S")
常用格式化代码
%Y %m %d %H %M %S
# 常用格式化占位符
# %Y 年(4位) %m 月(01-12) %d 日(01-31)
# %H 时(00-23) %M 分(00-59) %S 秒(00-59)
# %A 星期名 %B 月名 %j 年内天数
基本写法:ISO 格式解析
datetime.fromisoformat(<字符串>)
# 解析 ISO 8601 格式字符串
from datetime import datetime
dt = datetime.fromisoformat("2024-07-31T14:30:00")
基本写法:输出 ISO 格式
<日期>.isoformat()
# 输出 ISO 8601 格式字符串
now = datetime.now()
print(now.isoformat()) # 2024-07-31T14:30:00
timedelta 时间差
基本写法:创建时间差
datetime.timedelta([days], [seconds], [microseconds])
# 创建时间间隔
from datetime import timedelta, date
delta = timedelta(days=7)
基本写法:日期加减
<日期> + <时间差>
# 日期加减时间差
from datetime import date, timedelta
today = date.today()
next_week = today + timedelta(days=7)
基本写法:两个日期相减
<日期1> - <日期2>
# 计算日期差
from datetime import date
d1 = date(2024, 12, 31)
d2 = date(2024, 1, 1)
diff = d1 - d2
print(diff.days) # 365
基本写法:时间差属性
<时间差>.days / .seconds / .total_seconds()
# 访问时间差的各部分
delta = timedelta(days=1, hours=2)
print(delta.days) # 1
print(delta.seconds) # 7200
print(delta.total_seconds()) # 93600.0
时区处理
基本写法:设置时区
datetime.now(tz=<时区>)
# 获取带时区的当前时间
from datetime import datetime, timezone
utc_now = datetime.now(tz=timezone.utc)
基本写法:时区转换
<时间>.astimezone(<目标时区>)
# UTC 转本地时区
from datetime import datetime, timezone
utc_dt = datetime.now(tz=timezone.utc)
local_dt = utc_dt.astimezone()
基本写法:Python 3.9+ zoneinfo 时区
ZoneInfo("<时区名>")
# Python 3.9+ 使用 IANA 时区数据库
from zoneinfo import ZoneInfo
from datetime import datetime
tz_shanghai = ZoneInfo("Asia/Shanghai")
dt = datetime(2024, 7, 31, 14, 0, tzinfo=tz_shanghai)
基本写法:时区转换
<时间>.astimezone(ZoneInfo("<时区>"))
# 上海时间转纽约时间
from zoneinfo import ZoneInfo
shanghai_time = datetime.now(tz=ZoneInfo("Asia/Shanghai"))
ny_time = shanghai_time.astimezone(ZoneInfo("America/New_York"))
基本写法:Python 3.12+ fromisoformat 解析时区
datetime.fromisoformat(<带时区字符串>)
# Python 3.11+ 支持解析带时区的 ISO 字符串
dt = datetime.fromisoformat("2024-07-31T14:30:00+08:00")
time 模块
基本写法:获取时间戳
time.time()
# 返回当前时间的 Unix 时间戳(秒)
import time
ts = time.time()
基本写法:时间戳转结构化时间
time.localtime([<时间戳>])
# 转为本地时间 struct_time
t = time.localtime()
print(t.tm_year, t.tm_mon, t.tm_mday)
基本写法:格式化时间
time.strftime(<格式>, <结构化时间>)
# 按格式输出字符串
import time
s = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
基本写法:解析时间字符串
time.strptime(<字符串>, <格式>)
# 解析字符串为 struct_time
t = time.strptime("2024-07-31", "%Y-%m-%d")
基本写法:程序休眠
time.sleep(<秒>)
# 阻塞当前线程指定秒数
time.sleep(1.5)
基本写法:计时
time.perf_counter()
# 高精度计时器
start = time.perf_counter()
do_work()
elapsed = time.perf_counter() - start
基本写法:单调时钟
time.monotonic()
# 不受系统时间调整影响的单调时钟
start = time.monotonic()
time.sleep(1)
print(time.monotonic() - start)
基本写法:Python 3.11+ monotonic_ns
time.monotonic_ns()
# 纳秒精度单调时钟
ns = time.monotonic_ns()
time 性能计时
基本写法:测量代码执行时间
time.perf_counter()
# 使用 perf_counter 测量耗时
import time
start = time.perf_counter()
result = sum(range(10**6))
elapsed = time.perf_counter() - start
print(f"耗时: {elapsed:.4f} 秒")
基本写法:纳秒精度时间戳
time.time_ns()
# 返回纳秒精度时间戳
ns = time.time_ns()
基本写法:process_time 进程时间
time.process_time()
# 返回进程实际 CPU 时间(不含休眠)
start = time.process_time()
do_work()
cpu_time = time.process_time() - start
calendar 日历
基本写法:获取月历
calendar.month(<年>, <月>)
# 输出文本格式月历
import calendar
print(calendar.month(2024, 7))
基本写法:判断闰年
calendar.isleap(<年>)
# 判断是否为闰年
import calendar
print(calendar.isleap(2024)) # True
基本写法:获取某月天数
calendar.monthrange(<年>, <月>)
# 返回 (该月首日星期几, 该月天数)
import calendar
print(calendar.monthrange(2024, 2)) # (3, 29)