Python datetime模块详解

Python 的 datetime 模块是处理日期和时间的核心库,提供了丰富的类和方法来操作日期、时间、时间间隔和时区。以下是对该模块的详细介绍:


主要类

  1. datetime.date

    处理日期(年、月、日)。

    • 属性 : year, month, day
    • 常用方法 :
      • date.today(): 返回当前本地日期。
      • date.fromisoformat("YYYY-MM-DD"): 从字符串解析日期。
      • date.replace(year, month, day): 替换日期部分。
      • date.weekday(): 返回星期几(0=周一, 6=周日)。
      • date.strftime(format): 格式化日期为字符串。
  2. datetime.time

    处理时间(时、分、秒、微秒)。

    • 属性 : hour, minute, second, microsecond, tzinfo(时区)
    • 常用方法 :
      • time.replace(hour, minute, second, microsecond): 替换时间部分。
      • time.strftime(format): 格式化时间为字符串。
  3. datetime.datetime

    处理日期和时间的组合(最常用)。

    • 属性 : year, month, day, hour, minute, second, microsecond, tzinfo
    • 常用方法 :
      • datetime.now(tz=None): 返回当前本地日期时间。
      • datetime.utcnow(): 返回当前 UTC 时间。
      • datetime.combine(date, time): 合并日期和时间对象。
      • datetime.strptime(string, format): 解析字符串为日期时间。
      • datetime.timestamp(): 转换为 Unix 时间戳(秒)。
      • datetime.date(): 提取日期部分。
      • datetime.time(): 提取时间部分。
      • datetime.strftime(format): 格式化输出。
  4. datetime.timedelta

    表示时间间隔(如天、秒、微秒)。

    • 用途: 计算日期/时间的加减。

    • 示例 :

      python 复制代码
      future = datetime.now() + timedelta(days=7)  # 7天后
  5. datetime.tzinfo (抽象类)

    处理时区信息,需自定义实现。
    替代方案 : 使用标准库 datetime.timezone(Python 3.2+)或第三方库 pytz。

  6. datetime.timezone

    实现 tzinfo 的简单时区类。

    • 示例 :

      python 复制代码
      tz = timezone(timedelta(hours=8))  # UTC+8 时区
      dt = datetime(2023, 5, 15, tzinfo=tz)

关键操作示例

1. 获取当前时间
python 复制代码
from datetime import datetime
now = datetime.now()  # 2023-05-15 14:30:45.123456
2. 时间格式化与解析
python 复制代码
# 日期时间 → 字符串
s = now.strftime("%Y-%m-%d %H:%M:%S")  # "2023-05-15 14:30:45"

# 字符串 → 日期时间
dt = datetime.strptime("2023-05-15", "%Y-%m-%d")  # 时间部分默认为 00:00:00
3. 时间计算
python 复制代码
from datetime import timedelta

# 加减时间
tomorrow = now + timedelta(days=1)
last_hour = now - timedelta(hours=1)

# 计算时间差
diff = tomorrow - now
print(diff.total_seconds())  # 86400.0 秒
4. 时区处理
python 复制代码
from datetime import timezone, timedelta

# 创建 UTC+8 时区
tz_beijing = timezone(timedelta(hours=8))
dt_local = datetime(2023, 5, 15, 14, 30, tzinfo=tz_beijing)

# 转换为 UTC 时间
dt_utc = dt_local.astimezone(timezone.utc)  # 2023-05-15 06:30:00+00:00
5. 获取日期/时间部分
python 复制代码
date_part = now.date()  # 返回 date 对象
time_part = now.time()  # 返回 time 对象
year = now.year        # 2023

格式化符号表

符号 含义 示例
%Y 四位年份 2023
%m 两位月份(01-12) 05
%d 两位日期(01-31) 15
%H 24小时制小时(00-23) 14
%M 分钟(00-59) 30
%S 秒(00-59) 45
%f 微秒(000000-999999) 123456
%A 星期全名 Monday
%a 星期缩写 Mon
%B 月份全名 May
%b 月份缩写 May

最佳实践

  1. 处理时区 :
    优先使用 timezone 或第三方库 pytz(支持 IANA 时区数据库)。
  2. 时间存储 :
    建议用 UTC 时间存储,显示时再转换为本地时间。
  3. 性能敏感场景 :
    考虑使用 time.monotonic() 或 time.perf_counter() 替代时间差计算。

完整示例

python 复制代码
from datetime import datetime, timedelta, timezone

# 1. 获取当前时间(带时区)
now = datetime.now(timezone.utc)

# 2. 转换为北京时间 (UTC+8)
tz_beijing = timezone(timedelta(hours=8))
beijing_time = now.astimezone(tz_beijing)

# 3. 格式化输出
formatted = beijing_time.strftime("%Y-%m-%d %H:%M:%S %Z")
print(f"Beijing Time: {formatted}")  # e.g., "2023-05-15 22:30:45 UTC+08:00"

# 4. 计算7天后的日期
future = beijing_time + timedelta(days=7)

# 5. 解析字符串时间
dt_parsed = datetime.strptime("2023-12-31", "%Y-%m-%d")

通过掌握 datetime 模块,你可以高效处理绝大多数日期时间相关任务!

相关推荐
happylifetree18 分钟前
Python72:核心语法-类型注解-函数的类型注解
python
liudachu24 分钟前
Agent 开发常见名词说明与类比
python·langchain
devilnumber25 分钟前
Lambda 表达式(Java)优缺点清晰分析
java·开发语言·python
大泽九章1 小时前
XSS入门:存储型、反射型、DOM型,用Flask全复现
python·网络安全·flask
class心平气和1 小时前
ADB 工具函数 Python 使用教程
开发语言·python·adb
小小张说故事1 小时前
Python 里 is 和 == 到底差在哪?拆开小整数池、字符串驻留与 0ns 身份比较
python
滴啦嘟啦哒1 小时前
【具身笔记】【Piper+PI0.5】三、探究失败原因
笔记·python·vla·具身
W_326002 小时前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉
BD_Marathon2 小时前
【Python】标准多态和鸭子多态
python
用户8356290780512 小时前
Python 操作 Excel:创建数组公式与 R1C1 公式
后端·python