Python基础教程(五十九)内建模块之datetime:Python时间魔法师,datetime模块完全指南

一、核心对象四剑客

对象

属性

关键特性

date

year, month, day

纯日期操作

time

hour, minute, second

时间处理,可含时区

datetime

包含date+time所有属性

最常用,支持算术运算

timedelta

days, seconds

表示时间间隔,支持链式计算


二、关键操作示例

1. 日期运算与周计算
from datetime import datetime, timedelta

now = datetime.now()
print(f"此刻: {now}")  # 2024-08-12 14:30:00

# 计算3天后的日期
future = now + timedelta(days=3)
print(f"三天后: {future.date()}")  # 2024-08-15

# 判断本周一日期
monday = now - timedelta(days=now.weekday())
print(f"本周一: {monday.strftime('%Y-%m-%d')}")  # 2024-08-12
2. 时间解析与格式化
date_str = "2023-12-25 08:30"
dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M")
print(dt_obj)  # 2023-12-25 08:30:00

# 自定义格式输出
print(dt_obj.strftime("日期: %A, %B %d"))  # 日期: Monday, December 25
3. 时区关键操作
from datetime import timezone, timedelta

# 创建北京时间(UTC+8)
beijing_tz = timezone(timedelta(hours=8))
local_dt = datetime(2024, 1, 1, 12, tzinfo=beijing_tz)

# 转换为纽约时间(UTC-5)
ny_dt = local_dt.astimezone(timezone(timedelta(hours=-5)))
print(f"北京时间 {local_dt} → 纽约时间 {ny_dt}") 
# 输出: 2024-01-01 12:00+08:00 → 2023-12-31 23:00-05:00
4. 时间戳与datetime互转
# 获取当前时间戳(浮点数秒数)
timestamp = datetime.now().timestamp()
print(f"当前时间戳: {timestamp}")

# 时间戳转回datetime(含时区)
from_timestamp = datetime.fromtimestamp(timestamp, tz=timezone.utc)
print(f"UTC时间: {from_timestamp}")

三、避坑指南

  1. 时区陷阱
    • 默认datetime不含时区(naive),比较或计算前需统一时区
    • 使用astimezone()转换而非replace(tzinfo=...)(后者不调整时间值)
  1. 日期边界
    • timedelta支持负数(时间回溯)
    • 月份增减需用第三方库dateutil.relativedelta(避免闰月错误)

最佳实践

# 安全时区转换流程
naive_dt = datetime.now()  # 无时区对象
utc_dt = naive_dt.replace(tzinfo=timezone.utc)  # 标记为UTC时间
target_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))  # 转换到目标时区

通过系统掌握datetime对象生态与时区机制,可高效解决日志分析、定时任务、国际化系统等场景的时间难题。建议优先使用含时区对象(aware datetime)确保数据一致性。

源码速查:Python官方datetime文档
datetime — Basic date and time types — Python 3.13.6 documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值