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 模块,你可以高效处理绝大多数日期时间相关任务!

相关推荐
赫凯2 分钟前
【强化学习】第三章 马尔可夫决策过程
python·算法
Daily Mirror2 分钟前
Day42 Dataset和Dataloader
python
智航GIS3 分钟前
1.2 python及pycharm的安装
开发语言·python·pycharm
kszlgy10 分钟前
Day38 模型可视化与推理
python
无心水18 分钟前
【Stable Diffusion 3.5 FP8】1、Stable Diffusion 3.5 FP8 入门指南:为什么它能颠覆文生图效率?
人工智能·python·深度学习·机器学习·stable diffusion·ai镜像开发·ai镜像
38242782723 分钟前
python:单例模式
开发语言·python·单例模式
摸鱼仙人~23 分钟前
一文详解text2vec库
开发语言·python
natide30 分钟前
词汇/表达差异-6-n-gram分布距离
人工智能·python·算法
Yolo566Q30 分钟前
环境多介质逸度模型实践技术与典型案例【代码】应用
python
饕餮争锋32 分钟前
pip install 报错This environment is externally managed
开发语言·python·pip