python3 datetime模块

news/2025/12/11 5:19:01/文章来源:https://www.cnblogs.com/xtcoding/p/19324595

python3 datetime模块

本文从基础到实战,拆解datetime模块的核心用法与避坑要点。

一、datetime 模块核心组件

datetime模块包含 5 个核心类,覆盖日期、时间、时间差、时区的全维度处理:
 
类名作用示例
date 处理年 / 月 / 日(无时间) date(2025, 12, 9)
time 处理时 / 分 / 秒 / 微秒(无日期) time(14, 30, 59)
datetime 整合日期 + 时间(最常用) datetime(2025, 12, 9, 14, 30)
timedelta 表示时间差(天 / 小时 / 分钟等) timedelta(days=7)
zoneinfo 处理时区(Python3.9 + 新增) zoneinfo.ZoneInfo("Asia/Shanghai")

二、基础用法:创建、格式化、解析

1. 获取当前时间

最常用的场景是获取系统当前日期 / 时间,核心方法如下: 
from datetime import date, time, datetime# 获取当前日期(仅年月日)
today = date.today()
print("当前日期:", today)  # 输出:2025-12-09# 获取当前日期时间(含时分秒)
now = datetime.now()
print("当前日期时间:", now)  # 输出:2025-12-09 14:35:20.123456# 获取当前UTC时间(世界协调时间)
utc_now = datetime.utcnow()
print("UTC时间:", utc_now)  # 输出:2025-12-09 06:35:20.123456(东8区差8小时)
 

2. 手动构造时间对象

按需创建指定的日期 / 时间实例,注意参数顺序为年、月、日、时、分、秒、微秒,且月份从 1 开始(区别于其他语言的 0 起始):
 
from datetime import date, time, datetime# 构造日期对象(年、月、日为必填)
custom_date = date(2025, 12, 25)
print(custom_date)  # 2025-12-25# 构造时间对象(时为必填,分/秒/微秒可选)
custom_time = time(18, 30, 0)
print(custom_time)  # 18:30:00# 构造日期时间对象
custom_datetime = datetime(2025, 12, 25, 18, 30, 0)
print(custom_datetime)  # 2025-12-25 18:30:00
 

3. 日期时间格式化(转字符串)

使用strftime()方法将时间对象转为指定格式的字符串,核心格式符如下:
 
格式符含义示例
%Y 4 位年份 2025
%y 2 位年份 25
%m 2 位月份 12
%d 2 位日期 09
%H 24 小时制小时 14
%I 12 小时制小时 02
%M 分钟 35
%S 20
%A 星期全称 Tuesday
%a 星期简称 Tue
 
示例代码:
from datetime import datetimenow = datetime.now()
# 格式化为「年-月-日 时:分:秒」
fmt1 = now.strftime("%Y-%m-%d %H:%M:%S")
print(fmt1)  # 2025-12-09 14:35:20# 格式化为「月/日/年 星期 12小时制(带AM/PM)」
fmt2 = now.strftime("%m/%d/%y %A %I:%M %p")
print(fmt2)  # 12/09/25 Tuesday 02:35 PM
 

4. 字符串解析为时间对象

使用strptime()方法将字符串转为datetime对象,格式符必须与字符串格式完全匹配
 
from datetime import datetime# 待解析的时间字符串
time_str = "2025-12-25 18:30:00"
# 解析为datetime对象(格式符需与字符串一致)
parsed_dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(parsed_dt)  # 2025-12-25 18:30:00
print(type(parsed_dt))  # <class 'datetime.datetime'># 错误示例:格式符不匹配(比如用%y代替%Y)
# parsed_dt = datetime.strptime(time_str, "%y-%m-%d %H:%M:%S")  # 报错ValueError
 

三、进阶操作:时间计算与比较

1. 时间差计算(timedelta)

timedelta用于表示时间间隔,支持与datetime对象做加减运算,常用参数:days(天)、hours(小时)、minutes(分钟)、seconds(秒)、weeks(周)。
 
from datetime import datetime, timedeltanow = datetime.now()# 计算7天后的时间
after_7d = now + timedelta(days=7)
print("7天后:", after_7d)  # 2025-12-16 14:35:20.123456# 计算3小时30分钟前的时间
before_3h30m = now - timedelta(hours=3, minutes=30)
print("3小时30分钟前:", before_3h30m)  # 2025-12-09 11:05:20.123456# 计算两个时间的差值
dt1 = datetime(2025, 12, 25, 18, 30)
dt2 = datetime(2025, 12, 9, 14, 30)
delta = dt1 - dt2
print("时间差:", delta)  # 16 days, 4:00:00
print("相差天数:", delta.days)  # 16
print("相差秒数:", delta.total_seconds())  # 1382400.0
 

2. 日期时间比较

datetime/date对象支持直接用><==!=等运算符比较: 
from datetime import datetimedt1 = datetime(2025, 12, 9, 14, 30)
dt2 = datetime(2025, 12, 10, 10, 0)print(dt1 < dt2)  # True
print(dt1 == dt2)  # False
print(dt1 > dt2)  # False# 判断是否为今天
today = datetime.now().date()
target_date = datetime(2025, 12, 9).date()
print(target_date == today)  # True
 

3. 时间戳转换

时间戳是「从 1970-01-01 00:00:00 UTC 到当前时间的秒数」,datetime支持与时间戳互转:
 
from datetime import datetime# 1. datetime转时间戳
now = datetime.now()
timestamp = now.timestamp()
print("当前时间戳:", timestamp)  # 1733750120.123456# 2. 时间戳转datetime
dt_from_ts = datetime.fromtimestamp(timestamp)
print("时间戳转回datetime:", dt_from_ts)  # 2025-12-09 14:35:20.123456# 3. UTC时间戳转datetime(避免时区偏差)
utc_dt_from_ts = datetime.utcfromtimestamp(timestamp)
print("UTC时间戳转换:", utc_dt_from_ts)  # 2025-12-09 06:35:20.123456
 

四、实战场景:时区处理与批量生成日期

1. 时区处理(Python3.9+ zoneinfo)

默认的datetime对象是「天真时间」(无时区),处理跨时区业务时需显式指定时区:
 
from datetime import datetime
from zoneinfo import ZoneInfo# 1. 创建带时区的datetime对象(上海时区)
sh_dt = datetime.now(ZoneInfo("Asia/Shanghai"))
print("上海时间:", sh_dt)  # 2025-12-09 14:35:20.123456+08:00# 2. 转换为纽约时区
ny_dt = sh_dt.astimezone(ZoneInfo("America/New_York"))
print("纽约时间:", ny_dt)  # 2025-12-08 23:35:20.123456-05:00# 3. 列出所有可用时区
# import zoneinfo
# print(zoneinfo.available_timezones())
 

2. 生成指定范围内的日期列表

比如生成 2025 年 12 月的所有日期: 
from datetime import date, timedeltastart_date = date(2025, 12, 1)
end_date = date(2025, 12, 31)date_list = []
current_date = start_date
while current_date <= end_date:date_list.append(current_date)current_date += timedelta(days=1)# 打印前5天
print("2025年12月前5天:", date_list[:5])
# 输出:[datetime.date(2025, 12, 1), ..., datetime.date(2025, 12, 5)]
 

五、避坑指南:常见错误与解决方案

1. 格式符混淆(% Y vs % y、% H vs % I)

  • %Y是 4 位年份,%y是 2 位年份,混用会导致解析失败:
     
    # 错误:用%y解析4位年份
    # datetime.strptime("2025-12-09", "%y-%m-%d")  # ValueError
    # 正确:
    datetime.strptime("2025-12-09", "%Y-%m-%d")
    
     
     
  • %H是 24 小时制,%I是 12 小时制(需搭配 % p):
     
    # 错误:14点用%I解析(12小时制最大12)
    # datetime.strptime("14:30", "%I:%M")  # ValueError
    # 正确:
    datetime.strptime("14:30", "%H:%M")
    datetime.strptime("02:30 PM", "%I:%M %p")  # 12小时制+AM/PM
    
     
     

2. timedelta 不支持月份 / 年份加减

timedelta仅支持天 / 小时等固定间隔,无法直接加减月份(不同月份天数不同),需借助dateutil库:
 
# 安装:pip install python-dateutil
from datetime import datetime
from dateutil.relativedelta import relativedeltanow = datetime.now()
# 加1个月
next_month = now + relativedelta(months=1)
print("下个月今天:", next_month)  # 2026-01-09 14:35:20.123456# 减2年
last_2y = now - relativedelta(years=2)
print("2年前今天:", last_2y)  # 2023-12-09 14:35:20.123456
 

3. 时间对象不可变

datetime/date对象创建后无法修改属性,需重新创建:
  
from datetime import datetimedt = datetime(2025, 12, 9)
# 错误:直接修改属性
# dt.month = 11  # AttributeError
# 正确:重新创建
dt_new = dt.replace(month=11)
print(dt_new)  # 2025-11-09 00:00:00
 

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

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

相关文章

2025年跨境电商服务商权威推荐榜单:东南亚跨境电商/海外电商/电商开店培训服务商精选

跨境电商的迅猛发展,催生了一个庞大而专业的服务商生态。据行业分析报告显示,超过70%的跨境电商卖家正在使用至少一种外部专业服务,以应对从流量获取、订单履约到客户运营的全链条挑战。在众多服务商中,能够提供 “…

2025年宁波厂房装修公司综合排名及解析,看哪家实力强

在宁波的商业发展进程中,厂房作为企业生产的核心场所,其装修质量直接关系到生产效率与安全生产;展台搭建是企业展示产品、拓展市场的重要窗口;寺庙修缮则肩负着传承历史文化的责任。面对市场上众多装修公司,如何选…

2025年度中国抖音外卖服务商TOP5推荐:斯创全域外卖的售

随着本地生活服务赛道竞争加剧,抖音外卖业务整合升级后,服务商的专业能力成为商家破局的关键。本榜单基于真实合作案例与行业口碑调研,筛选出五家标杆服务商,为商家匹配适配伙伴提供客观参考。 TOP1 推荐:杭州斯创…

2025年无机纳米硅磨石厂家权威推荐榜单:现浇磨石‌/无机磨石‌/磨石施工‌‌源头厂家精选

无机纳米硅磨石作为一种新型绿色建材,因其卓越的耐磨抗裂性能、无VOC环保特性及独特的美学表现,在高端商业空间、公共建筑、城市更新等领域应用日益广泛。其核心性能的优劣,与生产厂家的技术研发实力、生产管控体系…

2025年中国五大玻璃钢格栅正规厂家推荐:靠谱厂家有哪些?

本榜单基于全维度市场调研与真实行业口碑,深度筛选出十家标杆企业,为有玻璃钢格栅采购需求的客户提供客观依据,助力精准匹配适配的合作厂商。 TOP1 推荐:北京润峰玻璃钢有限公司 推荐指数:★★★★★ 口碑评分:国…

剑指offer-47、求1+2+3...+n

题⽬描述 求 1+2+3+...+n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字及条件判断语句( A?B:C )。 示例 输⼊:5 输出:15 思路及解答 用for循环 这个问题,如果直接使⽤ for 循…

2025年北京银行灵活贷款服务五大推荐机构排行榜,看哪家口碑

为帮助中小微企业精准对接适配自身需求的银行贷款服务,避免融资走弯路,我们从资源整合能力(如持牌金融机构覆盖度)、方案定制精准度(含风险收益匹配度、政策适配性)、服务全周期体验(覆盖融资诊断到资金落地)、…

推荐一个html富文本转成unity富文本的js

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name=&qu…

shell sort排序

shell sort排序# sort默认按字符排序,使用数值排序 sort -n # 按照指定列排序 sort -k [第几列|1] -t [间隔符|_] # 去除重复行 sort -u # sort默认升序,使用降序排列 sort -r

阁下 AI 多模型协同能力全解析

阁下 AI 作为全球首个 AI 工具智能体平台,其多模型协同能力体现在五大核心维度,构建了超越单体模型的 "超级智能体" 系统: 一、异构模型智能整合 核心能力:无缝集成全球顶级大模型,构建 "模型联邦…

阁下 AI 多模型协同能力全解析

阁下 AI 作为全球首个 AI 工具智能体平台,其多模型协同能力体现在五大核心维度,构建了超越单体模型的 "超级智能体" 系统: 一、异构模型智能整合 核心能力:无缝集成全球顶级大模型,构建 "模型联邦…

2025年热门的铸铁电加热器实力与信誉双榜(权威推荐)

2025年热门的铸铁电加热器实力与信誉双榜(权威推荐)行业背景与市场趋势随着全球能源结构调整和环保意识提升,铸铁电加热器作为高效、稳定的加热解决方案,在工业、商业和民用领域的需求持续增长。2024年市场数据显示…

2025年浙江热镀锌钢格板厂家权威推荐榜单:钢格栅板/常规钢格板/热镀锌钢格板源头厂家精选

热镀锌钢格板因其优异的防腐性能和高承载能力,已成为石油化工、港口码头、市政工程及污水处理等关键工业领域不可或缺的基础材料。随着市场对产品标准化和定制化需求的同步增长,行业数据显示,领先企业通过引入自动化…

2025年质量好的真空净油机电加热器厂家最新用户好评榜

2025年质量好的真空净油机电加热器厂家用户好评榜 开篇:行业背景与市场趋势 随着工业自动化与环保要求的不断提高,真空净油机在电力、冶金、化工、机械制造等领域的应用日益广泛。作为真空净油机的核心部件之一,电…

2025年比较好的云母绕包电线/硅胶电线厂家推荐及采购指南

2025年比较好的云母绕包电线/硅胶电线厂家推荐及采购指南行业背景与市场趋势随着新能源、智能家居、医疗器械等行业的快速发展,特种电线电缆市场需求持续增长。云母绕包电线和硅胶电线作为高温环境下的关键材料,在耐…

2025年比较好的车载点烟器转换器/车载点烟器延长线高口碑厂家推荐(评价高)

2025年车载点烟器转换器/延长线高口碑厂家推荐行业背景与市场趋势随着汽车电子设备的普及和消费者对车载便利性需求的提升,车载点烟器转换器及延长线市场正迎来快速增长期。2024年全球车载电源配件市场规模已突破50亿…

2025年比较好的车载点烟器转换器/车载点烟器延长线高口碑厂家推荐(评价高)

2025年车载点烟器转换器/延长线高口碑厂家推荐行业背景与市场趋势随着汽车电子设备的普及和消费者对车载便利性需求的提升,车载点烟器转换器及延长线市场正迎来快速增长期。2024年全球车载电源配件市场规模已突破50亿…

CG-85C 振弦式土压力计 岩土压力变化及埋设地温度同时监测

CG-85C 振弦式土压力计 岩土压力变化及埋设地温度同时监测产品概述 振弦式土压力计由背板、感应板、信号传输电缆、振弦及激振电磁线圈等组成,是了解被测结构物内部土压力变化量、并可同步测量埋设点温度的监测设备。…

CG-85C 振弦式土压力计 岩土压力变化及埋设地温度同时监测

CG-85C 振弦式土压力计 岩土压力变化及埋设地温度同时监测产品概述 振弦式土压力计由背板、感应板、信号传输电缆、振弦及激振电磁线圈等组成,是了解被测结构物内部土压力变化量、并可同步测量埋设点温度的监测设备。…

详细介绍:Java-泛型

详细介绍:Java-泛型2025-12-09 08:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…