datetime 模块是 Python 中处理日期和时间的核心模块,提供了丰富的类和方法来处理日期、时间、时间间隔等。

主要类

1. datetime.date

处理日期(年、月、日)

from datetime import date

# 创建日期对象
today = date.today()
print(today)  # 2023-11-10

# 指定日期
specific_date = date(2023, 12, 25)
print(specific_date)  # 2023-12-25

# 获取日期组件
print(f"年: {today.year}, 月: {today.month}, 日: {today.day}")

2. datetime.time

处理时间(时、分、秒、微秒)

from datetime import time

# 创建时间对象
t = time(14, 30, 45)
print(t)  # 14:30:45

# 获取时间组件
print(f"时: {t.hour}, 分: {t.minute}, 秒: {t.second}")

3. datetime.datetime

处理日期和时间

from datetime import datetime

# 当前日期和时间
now = datetime.now()
print(now)  # 2023-11-10 14:30:45.123456

# 指定日期时间
dt = datetime(2023, 12, 25, 14, 30, 45)
print(dt)  # 2023-12-25 14:30:45

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

4. datetime.timedelta

处理时间间隔

from datetime import datetime, timedelta

now = datetime.now()

# 加一天
tomorrow = now + timedelta(days=1)
print(tomorrow)

# 减两小时
two_hours_ago = now - timedelta(hours=2)
print(two_hours_ago)

# 复杂的时间计算
future = now + timedelta(weeks=2, days=3, hours=5)
print(future)

常用方法

格式化输出

from datetime import datetime

now = datetime.now()

# 格式化日期时间
print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 2023-11-10 14:30:45
print(now.strftime("%A, %B %d, %Y"))     # Friday, November 10, 2023

# 解析字符串为datetime对象
date_str = "2023-12-25 14:30:45"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(parsed_date)

时间戳转换

from datetime import datetime

# datetime转时间戳
dt = datetime(2023, 12, 25, 14, 30, 45)
timestamp = dt.timestamp()
print(timestamp)

# 时间戳转datetime
dt_from_ts = datetime.fromtimestamp(timestamp)
print(dt_from_ts)

时区处理

from datetime import datetime, timezone, timedelta

# UTC时间
utc_now = datetime.now(timezone.utc)
print(utc_now)

# 创建特定时区
beijing_tz = timezone(timedelta(hours=8))
beijing_time = datetime.now(beijing_tz)
print(beijing_time)

实用示例

计算日期差

from datetime import date

date1 = date(2023, 12, 25)
date2 = date(2023, 11, 10)
delta = date1 - date2
print(f"相差天数: {delta.days}")

生成日期范围

from datetime import datetime, timedelta

start_date = datetime(2023, 11, 1)
end_date = datetime(2023, 11, 10)

current_date = start_date
while current_date <= end_date:
    print(current_date.strftime("%Y-%m-%d"))
    current_date += timedelta(days=1)

工作日计算

from datetime import datetime, timedelta

def add_business_days(start_date, business_days):
    current_date = start_date
    added_days = 0
    while added_days < business_days:
        current_date += timedelta(days=1)
        # 跳过周末(周一=0,周日=6)
        if current_date.weekday() < 5:
            added_days += 1
    return current_date

start = datetime(2023, 11, 10)  # 周五
result = add_business_days(start, 3)  # 加3个工作日
print(result)  # 2023-11-15 周三(跳过周末)

常用格式化代码

代码

含义

示例

%Y

4位数年份

2023

%m

2位数月份

11

%d

2位数日期

10

%H

24小时制小时

14

%M

分钟

30

%S


45

%A

完整星期名

Friday

%B

完整月份名

November

%I

12小时制小时

02

datetime 模块功能强大且灵活,是处理日期和时间相关任务的必备工具。