⏰ Python日期时间处理完全指南:从datetime到实战技巧

📌 引言

在Python编程中,日期和时间的处理是不可或缺的技能。无论是记录日志、处理用户数据,还是构建定时任务,都需要与日期时间打交道。本文将深入讲解Python的datetime模块,从基础概念到实战技巧,帮助你彻底掌握日期时间处理。

🎯 一、datetime模块核心类

Python的datetime模块提供了五个核心类:

  • date:日期(年、月、日)
  • time:时间(时、分、秒、微秒)
  • datetime:日期和时间的组合
  • timedelta:两个日期/时间之间的差值
  • tzinfo:时区信息基类

💻 二、基础操作代码示例

1. 获取当前日期时间

from datetime import datetime, date, time

# 获取当前日期时间
now = datetime.now()
print(f"当前日期时间: {now}")
print(f"当前日期: {date.today()}")

# 获取具体时间组件
print(f"年: {now.year}, 月: {now.month}, 日: {now.day}")
print(f"时: {now.hour}, 分: {now.minute}, 秒: {now.second}")

2. 创建自定义日期时间

from datetime import datetime, date, time

# 创建自定义日期
d = date(2024, 3, 15)
print(f"自定义日期: {d}")

# 创建自定义时间
t = time(14, 30, 0)
print(f"自定义时间: {t}")

# 创建自定义日期时间
dt = datetime(2024, 3, 15, 14, 30, 0)
print(f"自定义日期时间: {dt}")

3. 日期时间格式化

from datetime import datetime

now = datetime.now()

# strftime: 日期时间 -> 字符串
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化后: {formatted}")

# 常用格式代码
print(now.strftime("%Y年%m月%d日"))      # 2024年03月15日
print(now.strftime("%H:%M:%S"))          # 14:30:00
print(now.strftime("%A, %B %d, %Y"))     # Friday, March 15, 2024

# strptime: 字符串 -> 日期时间
date_str = "2024-03-15 14:30:00"
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"解析后: {parsed}")

⚡ 三、timedelta时间计算

from datetime import datetime, timedelta

now = datetime.now()

# 加/减天数
future = now + timedelta(days=7)
past = now - timedelta(days=7)
print(f"7天后: {future}")
print(f"7天前: {past}")

# 加/减小时、分钟
future_time = now + timedelta(hours=2, minutes=30)
print(f"2小时30分钟后: {future_time}")

# 计算时间差
deadline = datetime(2024, 12, 31)
diff = deadline - now
print(f"距离年底还有: {diff.days} 天")

🌍 四、时区处理

from datetime import datetime
import pytz

# 获取当前UTC时间
utc_now = datetime.now(pytz.UTC)
print(f"UTC时间: {utc_now}")

# 转换为特定时区
beijing_tz = pytz.timezone('Asia/Shanghai')
beijing_now = utc_now.astimezone(beijing_tz)
print(f"北京时间: {beijing_now}")

# 常用时区
ny_tz = pytz.timezone('America/New_York')
tokyo_tz = pytz.timezone('Asia/Tokyo')
print(f"纽约时间: {utc_now.astimezone(ny_tz)}")
print(f"东京时间: {utc_now.astimezone(tokyo_tz)}")

🛠️ 五、实战技巧

1. 计算两个日期之间的所有日期

from datetime import datetime, timedelta

def date_range(start_date, end_date):
    """生成日期范围内的所有日期"""
    current = start_date
    while current <= end_date:
        yield current
        current += timedelta(days=1)

start = datetime(2024, 3, 1)
end = datetime(2024, 3, 5)
for d in date_range(start, end):
    print(d.strftime("%Y-%m-%d"))

2. 获取本月第一天和最后一天

from datetime import datetime, timedelta
import calendar

def month_bounds(year, month):
    """获取指定月份的第一天和最后一天"""
    first_day = datetime(year, month, 1)
    last_day_num = calendar.monthrange(year, month)[1]
    last_day = datetime(year, month, last_day_num)
    return first_day, last_day

first, last = month_bounds(2024, 3)
print(f"3月从 {first.date()} 到 {last.date()}")

3. 时间戳转换

from datetime import datetime
import time

# 当前时间戳(秒)
timestamp = time.time()
print(f"当前时间戳: {timestamp}")

# 时间戳转日期时间
dt_from_ts = datetime.fromtimestamp(timestamp)
print(f"时间戳转日期时间: {dt_from_ts}")

# 日期时间转时间戳
ts = int(datetime.now().timestamp())
print(f"日期时间转时间戳: {ts}")

📋 六、常用格式代码表

代码含义示例
%Y 4位年份 2024
%m 2位月份 03
%d 2位日期 15
%H 24小时制小时 14
%M 分钟 30
%S 00
%A 星期几(全称) Friday
%B 月份(全称) March

🎓 总结

本文详细介绍了Python日期时间处理的核心知识:

  • datetime模块:掌握date、time、datetime、timedelta四大核心类
  • 格式化与解析:熟练使用strftime和strptime进行格式转换
  • 时间计算:使用timedelta进行日期时间的加减运算
  • 时区处理:借助pytz库处理跨时区场景
  • 实战技巧:日期范围生成、月份边界计算、时间戳转换

掌握这些技能后,你就能轻松应对各种日期时间处理需求。记住:好的时间处理代码是健壮系统的基石

(本文内容部分由AI辅助生成,代码示例均经过实际测试。)

posted @ 2026-03-23 04:46  码小小小仙  阅读(1)  评论(0)    收藏  举报