Python-datetime 库的详细介绍

以下是 Python datetime 模块的详细解析,涵盖其核心功能、常用函数及使用场景:

1. 模块概述

datetime 是 Python 标准库的核心模块之一,用于处理日期和时间相关的操作,包括:

  • 创建日期、时间、日期时间对象
  • 时间计算(加减、间隔)
  • 时区管理
  • 日期时间格式化与解析
  • 夏令时(DST)支持

注意

  • 纯 Python 实现,性能较低,高频时间计算建议使用 numpy 或 pandas
  • 时区支持需结合 pytz 或 zoneinfo(Python 3.2+ 自带)模块。

2. 核心类与常用函数

​**(1) 核心类**
类名描述
datetime.date表示日期(年、月、日)
datetime.time表示时间(时、分、秒、微秒)
datetime.datetime表示日期和时间(包含微秒)
datetime.timedelta表示时间间隔(天数、秒、微秒等)
datetime.timezone表示时区信息(Python 3.2+)

 **(2) 创建日期时间对象**

函数/方法描述示例
datetime.now()获取当前系统时间(含时区)now = datetime.now() → 2024-03-10 14:20:30.123456+08:00
datetime.today()获取当前日期(本地时间,无时区)today = datetime.today() → 2024-03-10
datetime.fromtimestamp(timestamp)通过 Unix 时间戳创建时间对象timestamp = 1678464000; dt = datetime.fromtimestamp(timestamp) → 2023-03-10 08:00:00+00:00
datetime.date(year, month, day)构造日期对象date(2024, 3, 10) → 2024-03-10

 **(3) 时间计算与操作**

方法/属性描述示例
datetime.timedelta(days=1)创建时间间隔(如 timedelta(days=1) 表示1天)delta = timedelta(days=1, hours=2) → 1 day 2 hours
datetime + timedelta加法运算(增加时间间隔)now = datetime.now(); future = now + timedelta(days=3) → 三天后
datetime - timedelta减法运算(减少时间间隔)past = now - timedelta(minutes=30) → 30分钟前
<>==比较两个日期时间对象if start_time < end_time: → 判断时间顺序

 **(4) 格式化与解析**

方法描述示例
strftime(format_str)格式化为字符串(类似 C 语言的 printfdt.strftime("%Y-%m-%d %H:%M:%S") → "2024-03-10 14:20:30"
str(dt)直接转换为易读字符串(无时区信息)str(datetime.now()) → "2024-03-10 14:20:30.123456"
datetime.strptime(s, format_str)将字符串解析为时间对象datetime.strptime("2024-03-10 14:20", "%Y-%m-%d %H:%M") → 对应时间对象

 

常用格式化符号

  • %Y:四位年份(如 2024)
  • %m:两位月份(01-12)
  • %d:两位日期(01-31)
  • %H:24小时制小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-61,含闰秒)
**(5) 时区处理(需 zoneinfo 或 pytz)​**
方法/类描述示例
datetime.timezone.utcUTC 时区对象utc_tz = datetime.timezone.utc
datetime.replace(tzinfo=timezone)设置时区信息local_dt = dt.replace(tzinfo=datetime.timezone.timezone.utc) → UTC 时间
astimezone(timezone)转换时区beijing_dt = utc_dt.astimezone(datetime.timezone(timedelta(hours=8))) → 北京时间

 

注意

  • 原生 datetime 不支持时区,需通过 tzinfo 属性手动设置(可能引发歧义)。
  • 推荐使用 pytz 或 zoneinfo 模块处理复杂时区转换。

 **(6) 其他实用函数**

函数/属性描述示例
datetime.max / min日期时间的最大/最小值datetime.max → 9999-12-31 23:59:59.999999
datetime.resolution时间精度(微秒)datetime.resolution → timedelta(microseconds=1)
time()获取当前时间(struct_time 格式)import time; time.time() → 时间戳(浮点数)

 3. 示例代码

from datetime import datetime, timedelta, timezone

# 创建时间对象
dt = datetime(2024, 3, 10, 14, 30)
print("原始时间:", dt)  # 2024-03-10 14:30:00

# 时间加减
dt_plus = dt + timedelta(days=2, hours=3)
print("两天三小时后:", dt_plus)  # 2024-03-12 17:30:00

# 格式化输出
print(dt.strftime("%Y-%m-%d %H:%M"))  # "2024-03-10 14:30"

# 解析字符串
s = "2024-03-10 14:30:00"
dt_parsed = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
print("解析后的时间:", dt_parsed)  # 2024-03-10 14:30:00

# 时区转换(需 Python 3.2+ zoneinfo)
utc_dt = datetime(2024, 3, 10, 14, 30, tzinfo=timezone.utc)
beijing_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print("北京时间:", beijing_dt)  # 2024-03-10 22:30:00+08:00

 

4. 注意事项

  1. 时区问题

    • 原生 datetime 不区分时区,跨时区计算可能导致错误(如夏令时调整)。
    • 推荐使用 pytz 或 zoneinfo 模块处理时区。
  2. 不可变性

    • datetime 对象是不可变的,每次修改会生成新对象(性能开销较小)。
  3. 夏令时(DST)​

    • 使用 pytz 的 localize 方法自动处理夏令时转换。
  4. 时间精度

    • 微秒级精度可通过 microsecond 属性设置,但多数场景只需到秒级。

 

5. 总结

  • 基础操作datetime.now()strftimetimedelta 是最常用的函数。
  • 复杂场景:时区转换推荐使用 pytz,日期计算建议结合 pandas 或 numpy
  • 替代库
    • 高性能:numpy.datetime64
    • 时区支持:pytzdateutil
    • 企业级:sqlalchemy(数据库时间处理)

掌握这些函数后,可以轻松应对大部分日期时间处理需求!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值