Python datetime库的用法 Python从入门到入土系列第3篇-洞察标准库DateTime
Python datetime库详解及实践案例
datetime是Python处理日期时间的核心标准库,提供日期、时间、时间间隔和时区操作功能。本文将通过15个代码示例详细解析其核心用法。
一、模块结构解析
datetime库包含5个主要类:
-
datetime.date
:处理日期(年、月、日) -
datetime.time
:处理时间(时、分、秒、微秒) -
datetime.datetime
:日期时间复合对象 -
datetime.timedelta
:时间间隔 -
datetime.tzinfo
:时区信息基类
二、date对象基础操作
1. 创建日期对象
from datetime import date# 创建指定日期
d = date(2023, 12, 25)
print(d) # 2023-12-25# 获取当前日期
today = date.today()
print(f"Today: {today}") # Today: 2023-08-20(当日日期)
2. 日期属性访问
print(f"Year: {d.year}") # Year: 2023
print(f"Month: {d.month}") # Month: 12
print(f"Day: {d.day}") # Day: 25
三、time对象操作
3. 创建时间对象
from datetime import timet = time(14, 30, 45, 123456)
print(t) # 14:30:45.123456print(f"Hour: {t.hour}") # 14
print(f"Minute: {t.minute}") # 30
print(f"Second: {t.second}") # 45
print(f"Microsecond: {t.microsecond}") # 123456
四、datetime复合对象
4. 创建日期时间
from datetime import datetime# 当前时间(本地)
now = datetime.now()
print(now) # 2023-08-20 15:30:45.123456# 指定日期时间创建
dt = datetime(2023, 8, 20, 9, 30, 15)
print(dt) # 2023-08-20 09:30:15
5. 时间戳转换
# 获取当前时间戳
timestamp = datetime.now().timestamp()
print(timestamp) # 1692595845.123456# 时间戳转datetime
dt_from_ts = datetime.fromtimestamp(1692595845)
print(dt_from_ts) # 2023-08-20 15:30:45
五、时间格式化与解析
6. 格式化输出(strftime)
dt = datetime(2023, 8, 20, 15, 30)
print(dt.strftime("%Y-%m-%d %H:%M:%S")) # 2023-08-20 15:30:00
print(dt.strftime("%A, %d %B %Y")) # Sunday, 20 August 2023
7. 字符串解析(strptime)
date_str = "2023-12-25 18:30"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M")
print(dt) # 2023-12-25 18:30:00
六、时间间隔计算(timedelta)
8. 基础时间运算
from datetime import timedeltadt = datetime(2023, 8, 20)
delta = timedelta(days=7, hours=3)print(dt + delta) # 2023-08-27 03:00:00
print(dt - delta) # 2023-08-12 21:00:00
9. 日期差计算
date1 = date(2023, 8, 20)
date2 = date(2023, 9, 1)
delta = date2 - date1
print(delta.days) # 12
七、时区处理(需pytz库)
10. 时区转换
import pytz
from datetime import datetime# 创建带时区的时间
utc_time = datetime.now(pytz.utc)
print(utc_time) # 2023-08-20 07:30:45.123456+00:00# 转换时区
tz_shanghai = pytz.timezone('Asia/Shanghai')
local_time = utc_time.astimezone(tz_shanghai)
print(local_time) # 2023-08-20 15:30:45.123456+08:00
八、综合实践案例
案例1:会议提醒系统
from datetime import datetime, timedelta# 设置会议时间
meeting_time = datetime(2023, 8, 25, 14, 0)
current_time = datetime.now()# 计算时间差
delta = meeting_time - current_timeif delta.days < 0:print("会议已结束")
else:hours = delta.seconds // 3600minutes = (delta.seconds % 3600) // 60print(f"距离会议还有 {delta.days} 天 {hours} 小时 {minutes} 分钟")
案例2:考勤时间计算
def calculate_working_hours(check_in, check_out):"""计算工作时长"""delta = check_out - check_inhours = delta.seconds // 3600minutes = (delta.seconds % 3600) // 60return f"{hours}小时{minutes}分钟"# 输入时间格式:HH:MM
check_in = datetime.strptime("09:15", "%H:%M")
check_out = datetime.strptime("18:30", "%H:%M")
print(calculate_working_hours(check_in, check_out)) # 9小时15分钟
九、常见格式符号速查表
符号 | 说明 | 示例 |
---|---|---|
%Y | 四位年份 | 2023 |
%m | 两位月份 | 08 |
%d | 两位日期 | 20 |
%H | 24小时制小时 | 15 |
%I | 12小时制小时 | 03 |
%M | 分钟 | 30 |
%S | 秒 | 45 |
%A | 完整星期名称 | Monday |
%B | 完整月份名称 | August |
%p | AM/PM标识 | PM |
通过以上15个示例,我们全面覆盖了datetime库的核心功能。实际开发中,结合具体需求灵活运用这些方法,可以高效处理各种日期时间相关业务场景。特别注意时区处理建议使用pytz库,确保时间计算的准确性。