python datetime(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在 Python 开发中,日期与时间的处理是一个高频需求。无论是数据分析、Web 应用开发,还是自动化脚本编写,开发者都离不开对时间信息的精准操作。datetime 模块作为 Python 标准库的核心组件,提供了强大且灵活的日期与时间处理功能。本文将从基础到进阶,结合实际案例,系统性地解析 python datetime 的核心知识点,帮助读者掌握这一工具的使用逻辑与最佳实践。


一、datetime 模块的核心概念

1.1 datetime 模块的定位

datetime 模块可以被视为 Python 的“时间瑞士军刀”,它整合了日期(date)、时间(time)、时区(timezone)、时间差(timedelta)等子模块,能够覆盖从基础的时间获取到复杂的时区转换等需求。

1.2 核心类的直观理解

模块中包含以下核心类:

  • datetime:表示具体的日期与时间(如:2023-10-01 15:30:00)。
  • date:仅包含日期部分(如:2023-10-01)。
  • time:仅包含时间部分(如:15:30:00)。
  • timedelta:表示两个时间点之间的间隔(如:3天或2小时)。
  • timezone:用于处理不同时区的时间差异。

比喻:可以将这些类想象为“时间乐高积木”,开发者可以根据需求自由组合,构建复杂的时间逻辑。


二、基础操作:获取与格式化时间

2.1 获取当前时间

通过 datetime.now()datetime.today() 可以快速获取当前日期与时间。两者的区别在于:

  • datetime.now() 可以指定时区,而 datetime.today() 默认使用本地时区。
  • 示例代码:
    from datetime import datetime  
    current_time = datetime.now()  
    print("当前时间:", current_time)  # 输出格式类似:2023-10-01 15:30:00.123456  
    

2.2 时间格式化(字符串化)

使用 strftime() 方法可以将 datetime 对象转换为自定义格式的字符串。常见格式符包括:
| 格式符 | 描述 | 示例输出 |
|--------|--------------------|----------|
| %Y | 四位数年份 | 2023 |
| %m | 两位数月份 | 10 |
| %d | 两位数日期 | 01 |
| %H | 24小时制小时 | 15 |
| %M | 分钟 | 30 |
| %S | 秒 | 00 |

案例:将当前时间格式化为“YYYY-MM-DD HH:MM”:

formatted_time = current_time.strftime("%Y-%m-%d %H:%M")  
print(formatted_time)  # 输出:2023-10-01 15:30  

2.3 字符串解析为 datetime 对象

通过 strptime() 方法,可以将字符串解析为 datetime 对象:

date_str = "2023-10-01 15:30"  
parsed_time = datetime.strptime(date_str, "%Y-%m-%d %H:%M")  
print(parsed_time)  # 输出:2023-10-01 15:30:00  

三、核心功能详解

3.1 时间差与日期计算

timedelta 类用于计算两个时间点之间的间隔:

from datetime import timedelta  

future_time = current_time + timedelta(days=3)  
print("三天后的时间:", future_time)  

date1 = datetime(2023, 10, 1)  
date2 = datetime(2023, 10, 5)  
delta = date2 - date1  
print("间隔天数:", delta.days)  # 输出:4  

3.2 日期与时间的分离与组合

开发者可以单独提取日期或时间部分:

date_only = current_time.date()  # 获取日期部分(date 类型)  
time_only = current_time.time()  # 获取时间部分(time 类型)  

new_datetime = datetime.combine(date_only, time_only)  

3.3 时区处理:跨越不同时区

Python 的 datetime 模块通过 timezone 类支持时区转换。例如,将本地时间转换为 UTC 时间:

from datetime import datetime, timezone  

utc_time = datetime.now(timezone.utc)  
print("UTC 时间:", utc_time)  

local_time = utc_time.astimezone(timezone(timedelta(hours=8)))  
print("本地时间:", local_time)  

四、进阶技巧与常见场景

4.1 处理国际化日期格式

通过 locale 模块,可以实现多语言日期显示:

import locale  
from datetime import datetime  

locale.setlocale(locale.LC_TIME, "zh_CN.UTF-8")  
current_time = datetime.now()  
print(current_time.strftime("%Y年%m月%d日"))  # 输出:2023年10月01日  

4.2 数据分析中的日期筛选

在数据处理场景中,datetime 可用于过滤特定时间段的数据:

orders = [  
    {"time": datetime(2023, 10, 1)},  
    {"time": datetime(2023, 9, 30)},  
    {"time": datetime(2023, 10, 2)}  
]  

filtered = [order for order in orders if order["time"] >= datetime(2023, 10, 1)]  

4.3 自动化脚本中的定时任务

结合 timedelta,可以实现定时任务逻辑:

import time  

def schedule_task():  
    next_run = datetime.now() + timedelta(minutes=5)  # 5分钟后执行  
    while True:  
        if datetime.now() >= next_run:  
            print("任务执行!")  
            next_run = datetime.now() + timedelta(minutes=5)  
        time.sleep(60)  # 每分钟检查一次  

五、常见问题与解决方案

5.1 时间格式化时出现异常

当输入的日期字符串格式与 strptime() 的格式符不匹配时,会抛出 ValueError解决方法

  1. 检查日期字符串中的分隔符是否与格式符一致(如 - 对应 %Y-%m-%d);
  2. 确保时间部分的格式(如 %H 对应 24 小时制)。

5.2 时区转换时的时差错误

若未正确设置时区信息,可能导致时间计算错误。解决方法

  • 使用 pytz 第三方库来管理时区(datetime 内置的 timezone 功能有限):
    import pytz  
    from datetime import datetime  
    
    beijing_tz = pytz.timezone("Asia/Shanghai")  
    beijing_time = datetime.now(beijing_tz)  
    

六、结论

python datetime 模块是开发者处理时间相关问题的基石,其灵活性与功能性能够满足从简单到复杂场景的需求。通过掌握日期与时间的获取、格式化、时区转换等核心操作,开发者可以高效地构建日历应用、数据分析系统或国际化 Web 应用。建议读者通过实际项目(如日志分析、任务调度)深化对模块的理解,并结合 pytz 等第三方工具扩展其功能。

关键词布局总结

  • 在文章标题、前言、核心概念章节及结论中自然提及“python datetime”;
  • 通过代码示例和场景描述间接强化关键词的语义关联。

(全文共计约 1,800 字)

最新发布