当前位置: 首页 > news >正文

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
    表示时间间隔(如天、秒、微秒)。

    • 用途: 计算日期/时间的加减。
    • 示例:
      future = datetime.now() + timedelta(days=7)  # 7天后
      
  5. datetime.tzinfo(抽象类)
    处理时区信息,需自定义实现。
    替代方案: 使用标准库 datetime.timezone(Python 3.2+)或第三方库 pytz

  6. datetime.timezone
    实现 tzinfo 的简单时区类。

    • 示例:
      tz = timezone(timedelta(hours=8))  # UTC+8 时区
      dt = datetime(2023, 5, 15, tzinfo=tz)
      

关键操作示例

1. 获取当前时间
from datetime import datetime
now = datetime.now()  # 2023-05-15 14:30:45.123456
2. 时间格式化与解析
# 日期时间 → 字符串
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. 时间计算
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. 时区处理
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. 获取日期/时间部分
date_part = now.date()  # 返回 date 对象
time_part = now.time()  # 返回 time 对象
year = now.year        # 2023

格式化符号表

符号含义示例
%Y四位年份2023
%m两位月份(01-12)05
%d两位日期(01-31)15
%H24小时制小时(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() 替代时间差计算。

完整示例

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

http://www.lqws.cn/news/495523.html

相关文章:

  • SpringBoot中使用表单数据有效性检验
  • C#串口通讯实战指南
  • 前端跨域解决方案(7):Node中间件
  • C语言数组介绍 -- 一维数组和二维数组的创建、初始化、下标、遍历、存储,C99 变长数组
  • Linux笔记---线程控制
  • 容器技术入门与Docker环境部署指南
  • js逻辑:【增量更新机制】
  • 【LeetCode 热题 100】42. 接雨水——(解法一)前后缀分解
  • Profibus DP主站转EtherNet/IP从站总线协议转换网关
  • Auto-GPT vs ReAct:两种智能体思路对决
  • 开始读Learning PostgresSQL第二版
  • B端布局性能优化秘籍:如何让个性化页面加载速度提升
  • 实时反欺诈:基于 Spring Boot 与 Flink 构建信用卡风控系统
  • 【AI论文】扩展大型语言模型(LLM)智能体在测试时的计算量
  • 硬件工程师笔试面试高频考点汇总——(2025版)
  • 软件更新 | 从数据到模型,全面升级!TSMaster新版助力汽车研发新突破
  • 体育数据api接口,足球api篮球api电竞api,比赛赛事数据api
  • 火山引擎大模型未来发展趋势
  • QML\QtQuick\QtWidgets适合的场景及其优缺点
  • 开发上门按摩APP应具备哪些安全保障功能?
  • Java流程控制--判断结构
  • Java编程中的设计模式:单例模式的深度剖析
  • 智能生成分析报告系统在危化安全生产监测预警评估中的应用
  • 【Java高频面试问题】数据结构篇
  • springboot开发项目 SLF4J+Logback日志框架集成【最终篇】
  • 智慧园区数字孪生最佳交付实践:沉淀可复用场景模板,实现快速部署与定制化开发
  • 顶级思维方式——认知篇十一《传习录》笔记
  • docker一键清除指令
  • 医疗B端系统布局创新:医护操作界面与患者数据的差异化呈现
  • 【LeetCode】用双指针解决移除元素问题、合并两个有序数组求解