Python datetime 模块常用功能(轻松搞定时间处理)

 更新时间:2025年07月29日 09:52:59   作者:满目828  
Python的datetime模块是处理日期时间的核心工具,包含date、time、datetime、timedelta四大类,用于获取当前时间、格式转换、时间计算及时区处理,解决常见时间问题,适用于日志记录、数据处理等场景,本文介绍Python datetime 模块常用功能,感兴趣的朋友一起看看吧

前言

在 Python 中,datetime模块是处理日期和时间的核心工具,提供了简洁易用的类和方法,能轻松解决时间解析、转换、计算等常见需求。本文将系统梳理datetime模块的常用功能,从基础到进阶,让你彻底掌握时间处理技巧。

一、核心类:datetime 模块的 "四大金刚"

datetime模块包含四个核心类,分别处理不同粒度的时间信息:

类名功能描述示例
date处理日期(年、月、日)date(2023, 10, 1) → 2023 年 10 月 1 日
time处理时间(时、分、秒、微秒)time(15, 30, 45) → 15 时 30 分 45 秒
datetime处理日期 + 时间(最常用)datetime(2023, 10, 1, 15, 30, 45)
timedelta表示时间间隔(用于时间加减)timedelta(days=3) → 3 天

二、获取当前时间:datetime.now () 的妙用

获取当前日期和时间是最基础的操作,datetime.now() 可直接返回当前本地时间:

from datetime import datetime, date, time
# 1. 获取当前日期+时间(datetime对象)
now = datetime.now()
print(now)  # 输出:2023-10-01 15:30:45.123456
print(type(now))  # 输出:<class 'datetime.datetime'>
# 2. 单独获取当前日期(date对象)
today = date.today()
print(today)  # 输出:2023-10-01
# 3. 单独获取当前时间(time对象)
current_time = datetime.now().time()
print(current_time)  # 输出:15:30:45.123456
  • datetime.now() 包含年、月、日、时、分、秒、微秒;
  • 可通过 datetime.utcnow() 获取当前 UTC 时间(世界协调时间)。

三、时间对象的属性与转换

datetimedatetime 对象提供了丰富的属性,可直接获取年、月、日等信息,也能转换为字符串:

1. 访问时间属性

dt = datetime(2023, 10, 1, 15, 30, 45)
# 获取年、月、日
print(dt.year)   # 2023
print(dt.month)  # 10
print(dt.day)    # 1
# 获取时、分、秒、微秒
print(dt.hour)   # 15
print(dt.minute) # 30
print(dt.second) # 45
print(dt.microsecond)  # 0(手动创建时未指定,默认为0)

2. 转换为字符串(格式化输出)

用 strftime(format) 方法将时间对象转为自定义格式的字符串(format 为格式化符号):

dt = datetime(2023, 10, 1, 15, 30, 45)
# 常用格式化符号
print(dt.strftime("%Y-%m-%d"))       # 2023-10-01(年-月-日)
print(dt.strftime("%H:%M:%S"))       # 15:30:45(时:分:秒,24小时制)
print(dt.strftime("%Y年%m月%d日 %H:%M"))  # 2023年10月01日 15:30
print(dt.strftime("%A, %B %d, %Y"))  # Sunday, October 01, 2023(星期、月份全称)

常用格式化符号表

符号含义示例
%Y4 位年份2023
%m2 位月份(01-12)10
%d2 位日期(01-31)01
%H24 小时制小时(00-23)15
%I12 小时制小时(01-12)03
%M2 位分钟(00-59)30
%S2 位秒数(00-59)45
%a星期缩写(如 Sun)Sun
%A星期全称(如 Sunday)Sunday
%b月份缩写(如 Oct)Oct
%B月份全称(如 October)October

3. 字符串转时间对象(解析)

用 strptime(date_string, format) 方法将字符串解析为时间对象(format 需与字符串格式一致):

# 解析日期字符串
date_str = "2023-10-01"
dt = datetime.strptime(date_str, "%Y-%m-%d")
print(dt)  # 输出:2023-10-01 00:00:00(时间部分默认00:00:00)
# 解析带时间的字符串
datetime_str = "2023-10-01 15:30:45"
dt = datetime.strptime(datetime_str, "%Y-%m-%d %H:%M:%S")
print(dt)  # 输出:2023-10-01 15:30:45
  • 若字符串格式与 format 不匹配,会报 ValueError,需确保格式一致。

四、时间计算:timedelta 的灵活运用

timedelta 表示时间间隔,可与 datetime 对象进行加减运算,实现 “多少天后 / 前的时间” 等需求:

1. 创建 timedelta 对象

from datetime import timedelta
# 常用参数:days, seconds, minutes, hours, weeks
delta1 = timedelta(days=3)         # 3天
delta2 = timedelta(hours=12)       # 12小时
delta3 = timedelta(weeks=1, days=2)  # 1周+2天=9天

2. 时间加减运算

now = datetime.now()
# 计算3天后的时间
future = now + timedelta(days=3)
print(f"3天后:{future.strftime('%Y-%m-%d')}")
# 计算1小时30分钟前的时间
past = now - timedelta(hours=1, minutes=30)
print(f"1小时30分钟前:{past.strftime('%H:%M')}")
# 两个datetime对象相减,得到timedelta
delta = future - now
print(f"时间间隔:{delta.days}天 {delta.seconds//3600}小时")  # 3天 0小时

3. 实用场景:计算两个日期相差的天数

date1 = date(2023, 1, 1)
date2 = date(2023, 12, 31)
delta = date2 - date1
print(f"2023年共有{delta.days}天")  # 输出:364(2023不是闰年)

五、日期的替换与调整

datetime 对象是不可变的,但可通过 replace() 方法创建修改后的新对象:

dt = datetime(2023, 10, 1, 15, 30)
# 替换年份和月份
new_dt = dt.replace(year=2024, month=1)
print(new_dt)  # 2024-01-01 15:30:00
# 替换时间为0点0分
midnight = dt.replace(hour=0, minute=0, second=0, microsecond=0)
print(midnight)  # 2023-10-01 00:00:00

六、时区处理(进阶)

默认情况下,datetime 不包含时区信息( naive 时间),处理跨时区时间需用 pytz 库或 Python 3.9+ 的 zoneinfo 模块(推荐):

1. 用 zoneinfo 处理时区(Python 3.9+)

from datetime import datetime
from zoneinfo import ZoneInfo  # 需Python 3.9+
# 创建带时区的datetime对象
# 北京时间(Asia/Shanghai)
beijing_time = datetime(2023, 10, 1, 8, 0, tzinfo=ZoneInfo("Asia/Shanghai"))
# 纽约时间(America/New_York)
newyork_time = datetime(2023, 10, 1, 8, 0, tzinfo=ZoneInfo("America/New_York"))
print(f"北京时间:{beijing_time}")  # 2023-10-01 08:00:00+08:00
print(f"纽约时间:{newyork_time}")  # 2023-10-01 08:00:00-04:00
# 转换为UTC时间
utc_time = beijing_time.astimezone(ZoneInfo("UTC"))
print(f"对应的UTC时间:{utc_time}")  # 2023-09-30 23:00:00+00:00

2. 时区转换

# 将纽约时间转换为北京时间
beijing_from_newyork = newyork_time.astimezone(ZoneInfo("Asia/Shanghai"))
print(f"纽约时间{newyork_time.strftime('%H:%M')} 对应北京时间:{beijing_from_newyork.strftime('%H:%M')}")
# 输出:纽约时间08:00 对应北京时间20:00(时差12小时)

七、常见错误与解决方案

错误:字符串解析格式不匹配

# 错误示例:字符串是"10/01/2023",格式用了"%Y-%m-%d"
datetime.strptime("10/01/2023", "%Y-%m-%d")  # ValueError
# 正确:格式改为"%m/%d/%Y"
datetime.strptime("10/01/2023", "%m/%d/%Y")  # 2023-10-01 00:00:00

错误:datetime 对象不可直接修改

dt = datetime(2023, 10, 1)
dt.year = 2024  # AttributeError: can't set attribute
# 正确:用replace()
dt = dt.replace(year=2024)

错误:不同时区的时间直接比较

# 避免直接比较naive时间(无时区)和aware时间(有时区)
naive_dt = datetime(2023, 10, 1)
aware_dt = datetime(2023, 10, 1, tzinfo=ZoneInfo("UTC"))
naive_dt == aware_dt  # 报错:TypeError: can't compare offset-naive and offset-aware datetimes

总结

datetime模块是 Python 处理时间的 “瑞士军刀”,核心功能包括:

  • datetime.now()获取当前时间;
  • strftime()strptime()实现时间与字符串的转换;
  • timedelta进行时间加减计算;
  • replace()调整日期或时间;
  • zoneinfo(或pytz)处理时区问题。

掌握这些方法,能轻松应对日志记录、日程计算、数据时间戳解析等常见场景。建议根据具体需求选择合适的类(datetime最常用),并注意字符串格式与时间对象的转换细节。

到此这篇关于Python datetime 模块常用功能(轻松搞定时间处理)的文章就介绍到这了,更多相关Python datetime 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 应用OpenCV和Python进行SIFT算法的实现详解

    应用OpenCV和Python进行SIFT算法的实现详解

    这篇文章主要介绍了应用OpenCV和Python进行SIFT算法的实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 如何定义TensorFlow输入节点

    如何定义TensorFlow输入节点

    今天小编就为大家分享一篇如何定义TensorFlow输入节点,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 解决django中form表单设置action后无法回到原页面的问题

    解决django中form表单设置action后无法回到原页面的问题

    这篇文章主要介绍了解决django中form表单设置action后无法回到原页面的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • np.ones的使用小结

    np.ones的使用小结

    本文主要介绍了np.ones的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 学会Python数据可视化必须尝试这7个库

    学会Python数据可视化必须尝试这7个库

    数据可视化是使用一些绘图和图形更详细地理解数据的过程.最著名的库之一是 matplotlib,它可以绘制几乎所有您可以想象的绘图类型.matplotlib 唯一的问题是初学者很难掌握.在本文中,我将介绍七个数据可视化库,你可以尝试使用它们来代替 matplotlib ,需要的朋友可以参考下
    2021-06-06
  • Python面向对象编程之类的封装

    Python面向对象编程之类的封装

    这篇文章主要介绍了Python面向对象编程之类的封装封装指属性和方法的抽象,属性的抽象又指对类的属性进行定义、隔离和保护,下面来看看文章的具体内容吧,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • 详解Python数据分析--Pandas知识点

    详解Python数据分析--Pandas知识点

    这篇文章主要介绍了Python数据分析--Pandas知识点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 利用Python实现快捷操作文件和文件夹

    利用Python实现快捷操作文件和文件夹

    shutil是Python标准库中的一个模块,提供了许多用于文件和文件夹操作的高级接口,本文主要详细介绍了Python如何使用shutil实现快捷操作文件和文件夹,需要的可以参考下
    2024-02-02
  • python安装win32com.client的实现示例

    python安装win32com.client的实现示例

    win32com.client是Python操作Windows COM对象的模块,用于与Office交互,本文主要介绍了python安装win32com.client的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • 从零开始安装Conda并搭建Python环境的全过程

    从零开始安装Conda并搭建Python环境的全过程

    conda是一个开源的包、环境管理器,可以用于在同一个机器上创建不同的虚拟环境,这篇文章主要介绍了安装Conda并搭建Python环境的相关资料,需要的朋友可以参考下
    2025-04-04

最新评论