Python时间处理必学技能:datetime模块功能拆解+代码逐行解析

Python时间处理必学技能:datetime模块功能拆解+代码逐行解析

datetime 模块是 Python 中处理日期和时间的核心模块。本文从功能分类角度详细解析其所有核心功能,并为每个核心函数提供完整代码示例。


datetime模块分类

  1. 日期处理(date 类)
    • 基础操作
    • 日期计算与属性
  2. 时间处理(time 类)
  3. 日期时间组合(datetime 类)
  4. 时间间隔计算(timedelta 类)
  5. 时区处理(tzinfo 与第三方库)
  6. 格式化与解析(strftimestrptime
  7. 实用工具与进阶技巧

一、日期处理(date 类)

1. 基础操作

date.today():获取当前日期
from datetime import date

today = date.today()
print("当前日期:", today)  # 输出: 2025-03-10
date.fromisoformat():从字符串解析日期
d = date.fromisoformat("2025-01-05")
print("解析日期:", d)  # 输出: 2025-01-05
date.fromordinal():从公历序数创建日期
d = date.fromordinal(739320)  # 公历序数(从1年1月1日起)
print("序数对应日期:", d)  # 输出: 2025-03-10

2. 日期计算与属性

date.replace():修改日期部分值
new_date = today.replace(year=2024, month=12)
print("修改后的日期:", new_date)  # 输出: 2024-12-10
date.weekday()date.isoweekday():获取星期
print("星期(0=周一):", today.weekday())      # 输出: 3(星期四)
print("星期(1=周一):", today.isoweekday())  # 输出: 4(星期四)
date.ctime():生成可读字符串
print("可读格式:", today.ctime())  # 输出: Mon Mar 10 00:00:00 2025
date.toordinal():转换为公历序数
print("公历序数:", today.toordinal())  # 输出: 739320

二、时间处理(time 类)

核心功能

time.replace():修改时间部分值
from datetime import time

t = time(14, 30, 15)
new_time = t.replace(hour=9, minute=0)
print("修改后的时间:", new_time)  # 输出: 09:00:15
time.isoformat():生成 ISO 8601 字符串
print("ISO格式:", t.isoformat())  # 输出: 14:30:15
time.strftime():自定义格式化
print("12小时制格式:", t.strftime("%I:%M %p"))  # 输出: 02:30 PM

三、日期时间组合(datetime 类)

1. 基础操作

datetime.now()datetime.utcnow()
from datetime import datetime

local_now = datetime.now()
utc_now = datetime.utcnow()
print("本地时间:", local_now)  # 输出: 2025-03-10 07:33:18.120428
print("UTC时间:", utc_now)     # 输出: 2025-03-09 23:33:18.125247
datetime.combine():合并日期和时间
d = date(2025, 3, 5)
t = time(14, 30)
dt = datetime.combine(d, t)
print("合并结果:", dt)  # 输出: 2025-03-05 14:30:00

2. 时间戳与属性

datetime.timestamp():转换为 Unix 时间戳
timestamp = dt.timestamp()
print("时间戳:", timestamp)  # 输出: 1741156200.0
datetime.date()datetime.time():提取日期/时间
print("日期部分:", dt.date())  # 输出: 2025-03-05
print("时间部分:", dt.time())  # 输出: 14:30:00

四、时间间隔计算(timedelta 类)

核心功能

创建时间间隔
from datetime import timedelta

delta1 = timedelta(days=7, hours=3)
delta2 = timedelta(weeks=2, minutes=30)
print("间隔1:", delta1)  # 输出: 7 days, 3:00:00
print("间隔2:", delta2)  # 输出: 14 days, 0:30:00
timedelta.total_seconds():总秒数计算
print("总秒数:", delta1.total_seconds())  # 输出: 615600.0

五、时区处理(tzinfo 与第三方库)

1. 使用 pytz

创建时区感知对象
import pytz
from datetime import datetime

tz_shanghai = pytz.timezone("Asia/Shanghai")
dt_local = datetime.now(tz_shanghai)
print("上海时间:", dt_local)  # 输出: 2025-03-10 07:40:43.495126+08:00
时区转换
dt_utc = dt_local.astimezone(pytz.utc)
print("UTC时间:", dt_utc)  # 输出: 2025-03-09 23:40:43.495126+00:00
处理夏令时
tz_ny = pytz.timezone("America/New_York")
dt_ny = tz_ny.localize(datetime(2025, 3, 12, 2, 30), is_dst=False)
print("纽约夏令时:", dt_ny)  # 输出: 2025-03-12 02:30:00-04:00

六、格式化与解析(strftimestrptime

1. 格式化符号大全

符号说明示例
%j年内的第几天(001-366)278
%U年内的周数(周日为一周起点)40
%Z时区名称UTC
%c本地日期时间表示Thu Oct 5 14:30:15 2025

2. 复杂格式示例

带时区的格式化
dt = datetime.now(pytz.utc)
print(dt.strftime("%Y-%m-%d %H:%M:%S %Z"))  # 输出: 2025-03-09 23:44:24 UTC
解析含时区的字符串
dt_str = "2025-03-05 14:30:15+08:00"
dt = datetime.fromisoformat(dt_str)
print("解析结果:", dt)  # 输出: 2025-03-05 14:30:15+08:00

七、实用工具与进阶技巧

1. 计算月末日期

import calendar
from datetime import date

def last_day_of_month(year, month):
    _, last_day = calendar.monthrange(year, month)
    return date(year, month, last_day)

print("2023-02月末:", last_day_of_month(2025, 2))  # 输出: 2025-02-28

2. 生成时间范围(精确到小时)

from datetime import datetime, timedelta

start = datetime(2025, 3, 10, 9, 0)
time_range = [start + timedelta(hours=i) for i in range(8)]
print("时间范围:", [t.strftime("%H:%M") for t in time_range])
# 输出: ['09:00', '10:00', ..., '16:00']

3. 处理闰秒(需手动调整)

from datetime import datetime
# 闰秒记录(2016-12-31 23:59:60)
leap_second = datetime(2016, 12, 31, 23, 59, 60)
print("闰秒时间(需手动处理):", leap_second)  # 注意:实际代码中会抛出 ValueError

总结

本文覆盖了 datetime 模块所有核心功能,每个函数均配有可运行的代码示例。通过掌握以下关键点,可以应对 95% 的日期时间处理需求:

  1. 明确对象类型:区分 datetimedatetime 和时区感知对象。
  2. 时区敏感操作:始终使用 pytzzoneinfo 处理时区。
  3. 格式与解析:熟练使用 strftimestrptime 的格式符号。
  4. 边界条件处理:闰年、月末、夏令时等场景需额外验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值