Python 的 datetime 模块使用详解

Python 的 datetime 模块提供了处理日期和时间的类和方法,用于操作日期、时间、时间差、时区等。以下是常用类和函数的使用说明:


主要类

  1. datetime.date

处理日期(年、月、日)。

  1. datetime.time

处理时间(时、分、秒、微秒),不包含日期。

  1. datetime.datetime

同时处理日期和时间(最常用)。

  1. datetime.timedelta

表示时间差(如天、秒、微秒),用于日期/时间的加减操作。

  1. datetime.tzinfo

时区信息基类(需自定义或使用第三方库如 pytz)。


常用方法及示例

1. 获取当前日期和时间
Python 复制代码
from datetime import datetime
now = datetime.now()  # 当前本地时间
utc_now = datetime.utcnow()  # 当前UTC时间
print(now)  # 输出示例: 2023-10-05 14:30:45.123456
2. 创建自定义日期/时间对象
Python 复制代码
from datetime import datetime, date, time
# 创建一个 datetime 对象
dt = datetime(2023, 10, 5, 15, 30, 0)
print(dt)  # 2023-10-05 15:30:00
# 创建一个 date 对象
d = date(2023, 10, 5)
print(d)  # 2023-10-05
# 创建一个 time 对象
t = time(15, 30, 0)
print(t)  # 15:30:00
3. 时间差计算(timedelta)
Python 复制代码
from datetime import datetime, timedelta
now = datetime.now()
# 加一天
future = now + timedelta(days=1)
# 减两小时
past = now - timedelta(hours=2)
print(future)
print(past)
4. 格式化日期时间(strftime)

将 datetime 对象转换为字符串:

Python 复制代码
dt = datetime.now()
formatted = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)  # 输出示例: 2023-10-05 15:30:00
5. 解析字符串为日期时间(strptime)

将字符串转换为 datetime 对象:

Python 复制代码
date_str = "2023-10-05 15:30:00"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(dt)  # 2023-10-05 15:30:00
6. 提取日期或时间的部分
Python 复制代码
dt = datetime.now()
year = dt.year
month = dt.month
day = dt.day
hour = dt.hour
minute = dt.minute
second = dt.second
print(f"{year}-{month}-{day} {hour}:{minute}:{second}")
7. 时区处理(需结合 pytz 库)
Python 复制代码
from datetime import datetime
import pytz
# 创建带时区的时间
tz = pytz.timezone("Asia/Shanghai")
dt = datetime.now(tz)
print(dt)  # 2023-10-05 15:30:00+08:00
# 转换时区
utc_dt = dt.astimezone(pytz.utc)
print(utc_dt)  # 2023-10-05 07:30:00+00:00

常用格式化符号

符号 含义 示例
%Y 四位年份 2023
%m 两位月份 10
%d 两位日期 05
%H 24小时制小时 15
%M 分钟 30
%S 秒 00
%A 星期全名 Monday
%a 星期缩写 Mon
%B 月份全名 October
%b 月份缩写 Oct

注意事项

  • 时区支持 :Python 内置的 datetime 对时区处理有限,推荐使用第三方库 pytz 或 Python 3.9+ 的 zoneinfo。

  • 日期范围 :datetime 支持的日期范围通常为 1-9999 年。

相关推荐
冻柠檬飞冰走茶2 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing032 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
橙橙笔记2 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
雪落漂泊2 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
小小张说故事2 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
波力海苔夹心脆6753 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩3 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
天天被压力4 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力4 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A5 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python