人工智能之编程进阶 Python高级:第五章 时间类模块

人工智能之编程进阶 Python高级

第五章 时间类模块


@

目录
  • 人工智能之编程进阶 Python高级
  • 前言
  • 一、time 模块:底层时间操作(Unix 时间戳)
    • 常用函数
    • 时间格式化代码(strftime / strptime
  • 二、calendar 模块:日历相关功能
    • 常用功能
  • 三、datetime 模块:面向对象的时间处理(推荐!)
    • 核心类
    • 1. 获取当前时间
    • 2. 创建自定义时间
    • 3. 时间格式化与解析
    • 4. 时间运算(timedelta
    • 5. 时区处理(timezone
    • 6. 其他实用方法
  • 四、三大模块对比总结
  • 五、典型应用场景
    • 1. 计算年龄
    • 2. 日志时间戳
    • 3. 定时任务间隔检查
    • 4. 时区转换(Web 应用)
  • 六、注意事项与最佳实践
  • 七、扩展建议
  • 总结
  • 资料关注


前言

Python 中处理时间与日期的核心模块有三个:timecalendardatetime。它们各有侧重,适用于不同场景。下面系统介绍它们的功能、用法、区别及最佳实践。


一、time 模块:底层时间操作(Unix 时间戳)

基于 ​C 语言的 time.h​,提供底层时间函数,以**秒为单位的时间戳(Unix Timestamp)**为核心。

常用函数

import time# 1. 获取当前时间戳(浮点数,单位:秒)
ts = time.time()
print("时间戳:", ts)  # 1730987654.123456# 2. 将时间戳转为本地时间元组(struct_time)
local = time.localtime(ts)
print("本地时间:", local)
# time.struct_time(tm_year=2025, tm_mon=11, tm_mday=7, ...)# 3. 将时间戳转为 UTC 时间元组
utc = time.gmtime(ts)
print("UTC 时间:", utc)# 4. 格式化时间(转为字符串)
formatted = time.strftime("%Y-%m-%d %H:%M:%S", local)
print("格式化时间:", formatted)  # 2025-11-07 18:55:00# 5. 解析时间字符串(转为时间元组)
parsed = time.strptime("2025-11-07 18:55:00", "%Y-%m-%d %H:%M:%S")
print("解析结果:", parsed)# 6. 睡眠(暂停程序)
time.sleep(1)  # 暂停 1 秒# 7. 获取可读时间字符串
print(time.ctime())  # Fri Nov  7 18:55:00 2025

时间格式化代码(strftime / strptime

代码 含义 示例
%Y 四位年份 2025
%y 两位年份 25
%m 月份(01-12) 11
%d 日(01-31) 07
%H 小时(00-23) 18
%M 分钟(00-59) 55
%S 秒(00-60) 30
%A 星期全名 Friday
%a 星期缩写 Fri
%B 月全名 November
%b 月缩写 Nov

⚠️ time 模块​不处理时区转换​(除本地/UTC),也不支持日期运算。


二、calendar 模块:日历相关功能

用于生成日历、判断闰年、获取星期等。

常用功能

import calendar# 1. 判断是否为闰年
print(calendar.isleap(2024))  # True
print(calendar.isleap(2025))  # False# 2. 获取某月日历(文本形式)
cal_text = calendar.month(2025, 11)
print(cal_text)
#    November 2025
# Mo Tu We Th Fr Sa Su
#                1  2
#  3  4  5  6  7  8  9
# ...# 3. 获取某月日历(列表形式)
weeks = calendar.monthcalendar(2025, 11)
print(weeks)
# [[0, 0, 0, 0, 0, 1, 2],
#  [3, 4, 5, 6, 7, 8, 9], ...]# 4. 获取星期几(Monday=0, Sunday=6)
weekday = calendar.weekday(2025, 11, 7)  # 2025-11-07 是星期五
print("星期:", weekday)  # 4# 5. 设置一周起始日(默认 Monday=0)
calendar.setfirstweekday(calendar.SUNDAY)# 6. 打印全年日历
# calendar.prcal(2025)

✅ ​适用场景​:生成日历视图、计算工作日、节日判断等。


三、datetime 模块:面向对象的时间处理(推荐!)

现代 Python 时间处理的首选​,提供 datetimedatetimetimedeltatimezone 等类,支持日期运算、时区、格式化等。

核心类

用途
datetime.date 年-月-日(无时分秒)
datetime.time 时:分:秒.微秒(无日期)
datetime.datetime 日期 + 时间(最常用)
datetime.timedelta 时间间隔(用于加减)
datetime.timezone 时区信息(UTC 或固定偏移)

1. 获取当前时间

from datetime import datetime, date, time, timedelta, timezone# 当前本地时间(无时区信息 → naive)
now = datetime.now()
print("当前时间:", now)  # 2025-11-07 18:55:00.123456# 当前 UTC 时间
utc_now = datetime.utcnow()  # 已弃用!推荐下面方式
utc_now = datetime.now(timezone.utc)
print("UTC 时间:", utc_now)

🔔 ​重要​:

  • naive datetime​:无时区信息(如 datetime.now()
  • aware datetime​:有时区信息(如 datetime.now(timezone.utc)
    避免混用 naive 和 aware 对象!

2. 创建自定义时间

# 创建具体日期时间
dt = datetime(2025, 11, 7, 18, 55, 30)
print(dt)  # 2025-11-07 18:55:30# 仅日期
d = date(2025, 11, 7)# 仅时间
t = time(18, 55, 30)

3. 时间格式化与解析

# 格式化为字符串
s = now.strftime("%Y-%m-%d %H:%M:%S")
print(s)  # "2025-11-07 18:55:00"# 从字符串解析(需指定格式)
dt_parsed = datetime.strptime("2025-11-07 18:55:00", "%Y-%m-%d %H:%M:%S")
print(dt_parsed)  # datetime(2025, 11, 7, 18, 55)

💡 推荐使用第三方库 dateutil.parser.parse() 自动解析多种格式。


4. 时间运算(timedelta

# 1 天后
tomorrow = now + timedelta(days=1)# 2 小时 30 分钟前
past = now - timedelta(hours=2, minutes=30)# 计算两个时间差
diff = tomorrow - now
print(diff.days)        # 1
print(diff.total_seconds())  # 86400.0# 支持:days, seconds, microseconds, milliseconds, minutes, hours, weeks

5. 时区处理(timezone

from datetime import timezone, timedelta# UTC 时间
utc_dt = datetime.now(timezone.utc)# 创建东八区(北京时间)
tz_beijing = timezone(timedelta(hours=8))
bj_dt = utc_dt.astimezone(tz_beijing)# 或直接创建带时区的时间
bj_time = datetime(2025, 11, 7, 18, 55, tzinfo=tz_beijing)print("UTC:", utc_dt)
print("北京:", bj_time)

🔒 ​生产建议​:
使用 zoneinfo(Python 3.9+)或 pytz 处理复杂时区(如夏令时):

from zoneinfo import ZoneInfo
ny_time = datetime.now(ZoneInfo("America/New_York"))

6. 其他实用方法

# 获取今天日期
today = date.today()  # date(2025, 11, 7)# 替换部分字段
new_dt = now.replace(year=2030, minute=0)# 获取时间戳
ts = now.timestamp()  # 转为 float 时间戳# 从时间戳创建 datetime
dt_from_ts = datetime.fromtimestamp(ts)

四、三大模块对比总结

功能 time calendar datetime
核心单位 秒(时间戳) 日历逻辑 日期/时间对象
面向对象
日期运算 ✅ (timedelta)
时区支持 仅本地/UTC ✅(需显式设置)
格式化/解析 ✅(需格式字符串) ✅(更直观)
适用场景 系统级、性能敏感 日历生成、星期计算 日常开发首选

✅ ​推荐策略​:

  • 新项目一律使用 datetime
  • 需要高性能时间戳用 time.time()
  • 生成日历或判断闰年用 calendar

五、典型应用场景

1. 计算年龄

from datetime import datedef calculate_age(birth_date: date) -> int:today = date.today()return today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))age = calculate_age(date(1990, 5, 15))

2. 日志时间戳

from datetime import datetimelog_time = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
print(f"{log_time} INFO: 程序启动")
# [2025-11-07 18:55:00] INFO: 程序启动

3. 定时任务间隔检查

last_run = datetime.now()
interval = timedelta(minutes=5)if datetime.now() - last_run > interval:print("执行任务...")last_run = datetime.now()

4. 时区转换(Web 应用)

from datetime import datetime, timezone
from zoneinfo import ZoneInfo  # Python 3.9+user_tz = ZoneInfo("Asia/Shanghai")
utc_time = datetime.now(timezone.utc)
local_time = utc_time.astimezone(user_tz)

六、注意事项与最佳实践

  1. 始终明确时区​:
    • 存储时间用 UTC
    • 展示给用户时转为本地时区
  2. 避免 naive datetime​:
    • 在涉及多时区系统中,务必使用 aware datetime
  3. 不要用 datetime.utcnow()​:
    • 它返回的是 naive 对象,应改用 datetime.now(timezone.utc)
  4. 时间比较前确保类型一致​:
    • naive 不能与 aware 比较,会报错
  5. 解析用户输入时验证格式​:
    • 使用 try-except 捕获 ValueError

七、扩展建议

  • 复杂时区​:使用 zoneinfo(Python 3.9+ 内置)或 pytz
  • 自然语言解析​:dateutil.parser
  • 高性能时间处理​:pandas.Timestamp(大数据场景)

总结

经过学习常见的时间模块 timecalendardatetime,我们可以有效解决 Python 中所有时间与日期相关的需求!建议优先使用 datetime,它是现代 Python 时间处理的标准答案。

资料关注

公众号:咚咚王

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen) 》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/970292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF(WebFTP —— easyupload1.0) - 实践

NSSCTF(WebFTP —— easyupload1.0) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

推迟win11更新137年的方法

1、打开cmd2、粘贴命令并运行(注意引号是英文)reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 5000 /f3、打开windows更新…

linux for 死循环

在 Linux 中, + #引号 + 死循环 + #引号 + (Dead Loop)通常指的是程序或脚本在执行过程中无限循环,无法正常退出。这可能是因为逻辑错误、未处理的异常、或未正确终止循环等原因导致的。 以下是一些常见的 Lin…

注册表禁用/启用Windows系统更新

在WindowsCenter中会通过注册表执行禁用windows更新的操作。 注册表位置\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate 禁用windows更新和关闭禁用windows更新的脚本如下。 禁用更新 reg ad…

CF954H

Sol 神秘观察题。 首先特判链一端在 LCA 的情况,这个是容易的。 首先不难想到一个暴力:\(f_{i,j}\) 表示链 LCA 在 \(i\),长度为 \(j\) 的个数,然后可以得到 \(f_{i,j}=\binom{a_i}{2}w_{1,i-1}\displaystyle\sum_…

PID 文件不一致导致 REDIS 一直重启

PID 文件不一致导致 REDIS 一直重启问题现象:Redis 服务每隔几十秒自动重启,systemd 状态显示为 activating,无法正常进入 active(running) 状态。排查过程: (1)日志显示没有找到/var/run/redis/redis-server.pi…

实用指南:centos7.2安装HAProxy1.5.18

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

爱玩机工具箱s22.1下载

爱玩机工具箱最新版下载

mysql 安装python3.11和pip3.11

` yum install python3.11 python3.11 -m ensurepip --upgrade `

Linux for OneNote

你提到的“Linux for OneNote”可能是一个误解或混淆。oneNote 是 Microsoft 的一款办公软件,主要用于笔记、文档管理和内容组织,它并不是 Linux 系统的一部分。 如果你是想了解 Linux 系统中如何管理笔记、文档或类…

linux for in seq

在 Linux 中,seq 是一个用于生成序列的命令,常用于循环或生成数字序列。for in seq 是一种常见的用法,用于在循环中使用 seq 生成数字。一、seq 的基本用法 seq [options] [start] [end]start:起始数字(默认是 1)…

高级程序语言设计第6次

这个作业属于:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/14585 学号:102500416 姓名:王浩宇 123456789101112131415

深入解析:Flink 实验性特性把“已预分区”的 DataStream 重新解释为 KeyedStream

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用最纯粹的白话,解析 AI Memory

用最纯粹的白话,解析 AI Memory想象一下:每次和朋友聊天,对方都会清空记忆,每段对话都从零开始,没有记忆、没有上下文、没有进展。而遗憾的是,这正是当下大多数 AI 系统的现状。它们足够聪明,却缺失了关键要素:…

2025苏州代理记账口碑榜:3 家靠谱机构/公司出圈,财税服务选对不踩坑!

在苏州创业热潮下,苏州代理记账、苏州代记账成为中小企业刚需,合规专业的苏州财务代理记账服务直接影响企业经营安全。2025 年榜单聚焦服务资质、账务准确率核心维度,精选 3 家口碑机构,为企业提供靠谱参考。 一、…

完整教程:电脑控制DFPlayer Mini MP3播放音乐

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025密炼机厂家实力榜:大连华韩领衔 四大品牌凭技术与口碑领跑橡塑机械行业

随着橡塑加工产业升级,密炼机作为核心装备的市场需求持续增长,2025 年全球市场规模预计突破 65 亿美元。本次榜单基于行业数据、技术实力与市场口碑筛选,聚焦四家优质密炼机厂家,为行业选择提供参考。 大连华韩橡塑…

2025矿物铸件厂家推荐排行榜:头部企业实力领跑,四星厂商凭细分优势站稳脚跟

在智能制造升级浪潮中,矿物铸件凭借高阻尼、低热膨胀系数的核心优势,成为机床、半导体、自动化等领域的关键基础材料。2025 年榜单聚焦技术实力、产能规模与应用适配性,精选 4 家优质矿物铸件厂家,其中南通盟鼎新材…

2025有限元分析/计算/测试服务商口碑榜:长春六耳科技领跑,技术深耕者成行业标杆

在工程数字化转型提速的背景下,有限元分析、有限元计算与有限元测试成为产品研发的核心支撑。2025 年行业洗牌加剧,兼具技术精度与服务能力的企业脱颖而出,以下为经市场验证的优质服务商推荐。 长春六耳科技有限公司…