Python datetime 模块
Python 的 datetime 模块是用于处理日期和时间的标准库模块。它提供了多种类和函数,可以帮助我们轻松地处理日期、时间、时间差等操作。无论是获取当前时间、格式化日期,还是计算时间差,datetime 模块都能胜任。
datetime 模块的核心类
datetime 模块中包含了以下几个核心类:
date类 -date类用于表示日期,包含年、月、日三个属性。- 
time类 -time类用于表示时间,包含时、分、秒、微秒等属性。 - 
datetime类 -datetime类是date和time的结合体,可以同时表示日期和时间。 - 
timedelta类 -timedelta类用于表示时间差,可以用于日期和时间的加减操作。 
使用 datetime 模块
获取当前日期和时间
我们可以使用 datetime 类的 now() 方法来获取当前的日期和时间。
实例
from datetime import datetime
# 获取当前日期和时间
now = datetime.now()
print("当前时间:", now)
# 获取当前日期和时间
now = datetime.now()
print("当前时间:", now)
输出示例:
当前时间: 2025-04-22 14:30:45.123456
创建特定的日期和时间
我们可以通过 datetime 类的构造函数来创建特定的日期和时间。
实例
from datetime import datetime
# 创建特定的日期和时间
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("特定时间:", specific_time)
# 创建特定的日期和时间
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("特定时间:", specific_time)
输出示例:
特定时间: 2025-04-22 15:30:00
格式化日期和时间
datetime 对象可以通过 strftime() 方法格式化为字符串。
实例
from datetime import datetime
# 获取当前时间
now = datetime.now()
# 格式化输出
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化时间:", formatted_time)
# 获取当前时间
now = datetime.now()
# 格式化输出
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化时间:", formatted_time)
输出示例:
格式化时间: 2025-04-22 14:30:45
计算时间差
timedelta 类可以用于计算两个日期或时间之间的差值。
实例
from datetime import datetime, timedelta
# 获取当前时间
now = datetime.now()
# 计算 10 天后的时间
future_time = now + timedelta(days=10)
print("10 天后的时间:", future_time)
# 获取当前时间
now = datetime.now()
# 计算 10 天后的时间
future_time = now + timedelta(days=10)
print("10 天后的时间:", future_time)
输出示例:
10 天后的时间: 2025-05-02 14:30:45.123456
常见应用场景
计算两个日期之间的天数
实例
from datetime import date
# 创建两个日期
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)
# 计算天数差
delta = date2 - date1
print("两个日期之间的天数差:", delta.days)
# 创建两个日期
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)
# 计算天数差
delta = date2 - date1
print("两个日期之间的天数差:", delta.days)
输出示例:
两个日期之间的天数差: 9
处理时区
datetime 模块本身不直接支持时区操作,但可以通过 pytz 库来处理时区。
实例
from datetime import datetime
import pytz
# 获取当前时间并设置时区
now = datetime.now(pytz.timezone('Asia/Shanghai'))
print("上海当前时间:", now)
import pytz
# 获取当前时间并设置时区
now = datetime.now(pytz.timezone('Asia/Shanghai'))
print("上海当前时间:", now)
输出示例:
上海当前时间: 2025-04-22 14:30:45.123456+08:00
常用类、方法及属性
1. 核心类
| 类 | 说明 | 示例 | 
|---|---|---|
datetime.date | 
                    日期类(年、月、日) | date(2023, 5, 15) | 
                
datetime.time | 
                    时间类(时、分、秒、微秒) | time(14, 30, 0) | 
                
datetime.datetime | 
                    日期时间类(包含日期和时间) | datetime(2023, 5, 15, 14, 30) | 
                
datetime.timedelta | 
                    时间间隔类(用于日期/时间计算) | timedelta(days=5) | 
                
datetime.tzinfo | 
                    时区信息基类(需子类化实现) | 自定义时区类 | 
2. date 对象常用方法/属性
   
        | 方法/属性 | 说明 | 示例 | 
|---|---|---|
date.today() | 
                    返回当前本地日期 | date.today() → date(2023, 5, 15) | 
                
date.fromisoformat(str) | 
                    从 YYYY-MM-DD 字符串解析日期 | 
                    date.fromisoformat("2023-05-15") | 
                
date.year | 
                    年份(只读) | d.year → 2023 | 
                
date.month | 
                    月份(1-12,只读) | d.month → 5 | 
                
date.day | 
                    日(1-31,只读) | d.day → 15 | 
                
date.weekday() | 
                    返回星期几(0=周一,6=周日) | d.weekday() → 0 | 
                
date.isoformat() | 
                    返回 YYYY-MM-DD 格式字符串 | 
                    d.isoformat() → "2023-05-15" | 
                
date.strftime(format) | 
                    自定义格式化输出 | d.strftime("%Y/%m/%d") → "2023/05/15" | 
                
3. time 对象常用方法/属性
    
        | 方法/属性 | 说明 | 示例 | 
|---|---|---|
time.hour | 
                    小时(0-23,只读) | t.hour → 14 | 
                
time.minute | 
                    分钟(0-59,只读) | t.minute → 30 | 
                
time.second | 
                    秒(0-59,只读) | t.second → 0 | 
                
time.microsecond | 
                    微秒(0-999999,只读) | t.microsecond → 0 | 
                
time.isoformat() | 
                    返回 HH:MM:SS.mmmmmm 格式字符串 | 
                    t.isoformat() → "14:30:00" | 
                
time.strftime(format) | 
                    自定义格式化输出 | t.strftime("%H:%M") → "14:30" | 
                
4. datetime 对象常用方法/属性
   
        | 方法/属性 | 说明 | 示例 | 
|---|---|---|
datetime.now() | 
                    返回当前本地日期时间 | datetime.now() → datetime(2023, 5, 15, 14, 30, 0) | 
                
datetime.utcnow() | 
                    返回当前 UTC 日期时间 | datetime.utcnow() | 
                
datetime.fromtimestamp(ts) | 
                    从时间戳创建 datetime 对象 | 
                    datetime.fromtimestamp(1684146600) | 
                
datetime.timestamp() | 
                    返回时间戳(浮点数秒) | dt.timestamp() → 1684146600.0 | 
                
datetime.date() | 
                    提取日期部分 | dt.date() → date(2023, 5, 15) | 
                
datetime.time() | 
                    提取时间部分 | dt.time() → time(14, 30) | 
                
datetime.year | 
                    年份(同 date) | 
                    dt.year → 2023 | 
                
datetime.strftime(format) | 
                    自定义格式化输出 | dt.strftime("%Y-%m-%d %H:%M") → "2023-05-15 14:30" | 
                
5. timedelta 对象常用属性
    
        | 属性 | 说明 | 示例 | 
|---|---|---|
days | 
                    天数(可正可负) | delta.days → 5 | 
                
seconds | 
                    秒数(0-86399) | delta.seconds → 3600(1小时) | 
                
microseconds | 
                    微秒数(0-999999) | delta.microseconds → 0 | 
                
6. 常用格式化符号(strftime)
    
        | 符号 | 说明 | 示例输出 | 
|---|---|---|
%Y | 
                    四位年份 | 2023 | 
                
%m | 
                    两位月份(01-12) | 05 | 
                
%d | 
                    两位日(01-31) | 15 | 
                
%H | 
                    24小时制小时(00-23) | 14 | 
                
%M | 
                    分钟(00-59) | 30 | 
                
%S | 
                    秒(00-59) | 00 | 
                
%A | 
                    完整星期名 | Monday | 
                
%a | 
                    缩写星期名 | Mon | 
                
%B | 
                    完整月份名 | May | 
                
%b | 
                    缩写月份名 | May | 
                
实例
1. 计算日期差
实例
from datetime import date, timedelta
d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1 # 返回 timedelta 对象
print(delta.days) # 输出: 17
d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1 # 返回 timedelta 对象
print(delta.days) # 输出: 17
2. 时间加减
实例
from datetime import datetime, timedelta
now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))
now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))
3. 时区转换(需安装 pytz)
实例
from datetime import datetime
import pytz
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)
import pytz
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)
4. 解析字符串
实例
from datetime import datetime
dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year) # 输出: 2023
dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year) # 输出: 2023
注意事项
不可变性:所有
datetime对象不可变,操作会返回新对象。时区处理:原生
datetime无时区支持,需用pytz或 Python 3.9+ 的zoneinfo。性能:频繁创建对象可能影响性能,考虑重用或缓存。
边界检查:非法日期(如
date(2023, 2, 30))会触发ValueError。
 
       
点我分享笔记