Python datetime模块知识点汇总
编程小白也能看懂的日期时间处理指南
什么是datetime模块?
datetime模块是Python内置的日期和时间处理工具包,就像你手机上的日历和时钟应用一样,可以帮你处理各种日期和时间相关的问题。
📅 想象datetime模块就是一个时间管家,帮你记住日期、计算时间差、设置闹钟(定时任务)等
为什么要使用datetime模块?
- 计算日期差(比如计算距离生日还有多少天)
- 格式化日期显示(把2023-01-01显示成”2023年1月1日”)
- 解析字符串中的日期(从”2023年1月1日”识别出日期)
- 处理时区问题(全球不同地区的时间转换)
- 记录事件发生的时间戳
datetime的四个核心类
1. date类 – 处理日期
只关心年月日,不关心具体时间(几点几分)
from datetime import date
# 创建一个日期
d = date(2023, 8, 15) # 2023年8月15日
# 获取今天的日期
today = date.today()
# 获取日期的各个部分
print(today.year) # 2023(年)
print(today.month) # 8(月)
print(today.day) # 15(日)
# 获取星期几(星期一为0,星期日为6)
print(today.weekday()) # 如果是星期二,返回1
# 创建一个日期
d = date(2023, 8, 15) # 2023年8月15日
# 获取今天的日期
today = date.today()
# 获取日期的各个部分
print(today.year) # 2023(年)
print(today.month) # 8(月)
print(today.day) # 15(日)
# 获取星期几(星期一为0,星期日为6)
print(today.weekday()) # 如果是星期二,返回1
2. time类 – 处理时间
只关心时间(几点几分几秒),不关心具体日期
from datetime import time
# 创建一个时间
t = time(14, 30, 45) # 14:30:45(下午2点30分45秒)
# 获取时间的各个部分
print(t.hour) # 14(小时)
print(t.minute) # 30(分钟)
print(t.second) # 45(秒)
# 创建一个时间
t = time(14, 30, 45) # 14:30:45(下午2点30分45秒)
# 获取时间的各个部分
print(t.hour) # 14(小时)
print(t.minute) # 30(分钟)
print(t.second) # 45(秒)
datetime核心类(续)
3. datetime类 – 日期+时间
同时包含日期和时间,最常用的类
from datetime import datetime
# 创建一个日期时间
dt = datetime(2023, 8, 15, 14, 30, 45) # 2023-08-15 14:30:45
# 获取当前日期和时间
now = datetime.now()
# 获取日期时间的各个部分
print(now.year) # 年
print(now.month) # 月
print(now.day) # 日
print(now.hour) # 小时
print(now.minute) # 分钟
print(now.second) # 秒
# 创建一个日期时间
dt = datetime(2023, 8, 15, 14, 30, 45) # 2023-08-15 14:30:45
# 获取当前日期和时间
now = datetime.now()
# 获取日期时间的各个部分
print(now.year) # 年
print(now.month) # 月
print(now.day) # 日
print(now.hour) # 小时
print(now.minute) # 分钟
print(now.second) # 秒
4. timedelta类 – 时间间隔
表示两个时间点之间的间隔(时间差)
from datetime import datetime, timedelta
# 创建一个时间间隔
# 表示3天5小时30分钟
delta = timedelta(days=3, hours=5, minutes=30)
# 计算未来日期
now = datetime.now()
future = now + delta # 3天5小时30分钟后的时间
# 计算过去日期
past = now – timedelta(weeks=2) # 两周前
# 创建一个时间间隔
# 表示3天5小时30分钟
delta = timedelta(days=3, hours=5, minutes=30)
# 计算未来日期
now = datetime.now()
future = now + delta # 3天5小时30分钟后的时间
# 计算过去日期
past = now – timedelta(weeks=2) # 两周前
日期时间格式化
将日期时间转换成字符串,或从字符串解析出日期时间
日期时间 → 字符串(strftime)
使用strftime
方法将日期时间转换成自定义格式的字符串
now = datetime.now()
# 格式化为:2023-08-15
date_str = now.strftime(“%Y-%m-%d”)
# 格式化为:2023年08月15日 14:30:45
datetime_str = now.strftime(“%Y年%m月%d日 %H:%M:%S”)
# 常用格式符号:
# %Y: 四位年份(2023)
# %m: 两位月份(08)
# %d: 两位日期(15)
# %H: 24小时制小时(00-23)
# %M: 分钟(00-59)
# %S: 秒(00-59)
# %A: 星期全名(Tuesday)
# 格式化为:2023-08-15
date_str = now.strftime(“%Y-%m-%d”)
# 格式化为:2023年08月15日 14:30:45
datetime_str = now.strftime(“%Y年%m月%d日 %H:%M:%S”)
# 常用格式符号:
# %Y: 四位年份(2023)
# %m: 两位月份(08)
# %d: 两位日期(15)
# %H: 24小时制小时(00-23)
# %M: 分钟(00-59)
# %S: 秒(00-59)
# %A: 星期全名(Tuesday)
字符串 → 日期时间(strptime)
使用strptime
方法将字符串解析为日期时间对象
# 从字符串解析日期时间
date_str = “2023-08-15”
dt = datetime.strptime(date_str, “%Y-%m-%d”)
# 解析更复杂的格式
datetime_str = “2023年08月15日 14:30:45”
dt = datetime.strptime(datetime_str, “%Y年%m月%d日 %H:%M:%S”)
date_str = “2023-08-15”
dt = datetime.strptime(date_str, “%Y-%m-%d”)
# 解析更复杂的格式
datetime_str = “2023年08月15日 14:30:45”
dt = datetime.strptime(datetime_str, “%Y年%m月%d日 %H:%M:%S”)
实战应用场景
1. 计算两个日期相差多少天
from datetime import date
date1 = date(2023, 1, 1)
date2 = date(2023, 8, 15)
# 计算日期差
delta = date2 – date1
print(delta.days) # 226(天)
date1 = date(2023, 1, 1)
date2 = date(2023, 8, 15)
# 计算日期差
delta = date2 – date1
print(delta.days) # 226(天)
2. 计算某个日期是星期几
from datetime import date
d = date(2023, 8, 15)
# 星期几(0=星期一,6=星期日)
weekday = d.weekday()
# 转换为中文星期
weekdays = [“星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”, “星期日”]
print(weekdays[weekday]) # 例如:”星期二”
d = date(2023, 8, 15)
# 星期几(0=星期一,6=星期日)
weekday = d.weekday()
# 转换为中文星期
weekdays = [“星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”, “星期日”]
print(weekdays[weekday]) # 例如:”星期二”
3. 生成最近一周的日期列表
from datetime import datetime, timedelta
today = datetime.now().date()
# 生成最近7天的日期
date_list = [today – timedelta(days=i) for i in range(7)]
for d in date_list:
print(d.strftime(“%Y-%m-%d”))
today = datetime.now().date()
# 生成最近7天的日期
date_list = [today – timedelta(days=i) for i in range(7)]
for d in date_list:
print(d.strftime(“%Y-%m-%d”))
注意事项和小技巧
📌 重要注意事项
- 月份范围是1-12,日期范围根据月份不同(1-31)
- 小时范围是0-23,分钟和秒是0-59
- 超出范围的值会引发ValueError异常
- 日期比较:date1 < date2 表示date1在date2之前
实用小技巧
- 获取某月的最后一天:
from calendar import monthrange
year, month = 2023, 2
last_day = monthrange(year, month)[1] # 28(2023年2月) - 计算两个时间点相差多少分钟:
dt1 = datetime(2023, 8, 15, 10, 0)
dt2 = datetime(2023, 8, 15, 11, 30)
delta = dt2 – dt1
minutes = delta.total_seconds() / 60 # 90.0分钟
时区处理(高级)
Python 3.9+ 提供了zoneinfo模块处理时区:
from datetime import datetime
from zoneinfo import ZoneInfo
# 创建带时区的时间
dt = datetime(2023, 8, 15, 12, 0, tzinfo=ZoneInfo(“Asia/Shanghai”))
# 转换为其他时区
dt_ny = dt.astimezone(ZoneInfo(“America/New_York”))
from zoneinfo import ZoneInfo
# 创建带时区的时间
dt = datetime(2023, 8, 15, 12, 0, tzinfo=ZoneInfo(“Asia/Shanghai”))
# 转换为其他时区
dt_ny = dt.astimezone(ZoneInfo(“America/New_York”))