Python3 【datetime模块】编程范例:10 个 datetime 经典应用代码示例

Python3 【datetime模块】编程范例:10 datetime 经典应用代码示例

本文展示 10 个 Python datetime 模块的经典应用范例,附带代码示例和详细解释:

1. 计算年龄(精确到天)

场景:根据出生日期计算用户的年龄(精确到天数)。

from datetime import date

def calculate_age(birth_date: date) -> tuple:
    today = date.today()
    years = today.year - birth_date.year
    months = today.month - birth_date.month
    days = today.day - birth_date.day

    # 调整未过生日的情况
    if (months < 0) or (months == 0 and days < 0):
        years -= 1
        months += 12

    # 计算剩余天数
    if days < 0:
        last_month = today.replace(month=today.month - 1)
        days_in_last_month = (today - last_month).days
        days += days_in_last_month
        months -= 1

    return years, months, days

birthday = date(1995, 8, 20)
age = calculate_age(birthday)
print(f"年龄:{age[0]}{age[1]}{age[2]}天")
# 输出示例:年龄:28岁 1月 15天

2. 时间戳与日期互转

场景:将 Unix 时间戳转换为可读日期,或反向操作。

from datetime import datetime

# 时间戳 -> 日期
timestamp = 1696521600  # 2023-10-05 00:00:00 UTC
dt = datetime.fromtimestamp(timestamp)
print(f"时间戳转日期:{dt.strftime('%Y-%m-%d %H:%M:%S')}")  # 输出:2023-10-05 00:00:00

# 日期 -> 时间戳
dt_obj = datetime(2023, 10, 5, 0, 0)
timestamp = int(dt_obj.timestamp())
print(f"日期转时间戳:{timestamp}")  # 输出:1696521600

3. 生成日期范围

场景:生成两个日期之间的所有日期列表。

from datetime import datetime, timedelta

def date_range(start: str, end: str) -> list:
    start_date = datetime.strptime(start, "%Y-%m-%d")
    end_date = datetime.strptime(end, "%Y-%m-%d")
    delta = end_date - start_date

    dates = []
    for i in range(delta.days + 1):
        current_date = start_date + timedelta(days=i)
        dates.append(current_date.strftime("%Y-%m-%d"))
    return dates

date_list = date_range("2023-10-01", "2023-10-05")
print(date_list)  # 输出:['2023-10-01', '2023-10-02', ..., '2023-10-05']

4. 判断闰年

场景:检查某年是否为闰年。

from datetime import date

def is_leap_year(year: int) -> bool:
    try:
        date(year, 2, 29)  # 尝试创建2月29日
        return True
    except ValueError:
        return False

print(is_leap_year(2024))  # 输出:True
print(is_leap_year(2023))  # 输出:False

5. 倒计时功能

场景:计算距离某个未来时间点的剩余时间。

from datetime import datetime, timedelta

def countdown(target: str) -> timedelta:
    now = datetime.now()
    target_time = datetime.strptime(target, "%Y-%m-%d %H:%M:%S")
    remaining = target_time - now
    return remaining

remaining_time = countdown("2024-01-01 00:00:00")
print(f"距离2024年元旦还有:{remaining_time.days}{remaining_time.seconds//3600}小时")

6. 统计代码执行时间

场景:测量某段代码的运行耗时。

from datetime import datetime

start = datetime.now()

# 模拟耗时操作
for _ in range(1000000):
    pass

end = datetime.now()
elapsed = end - start
print(f"代码执行耗时:{elapsed.total_seconds():.4f}秒")
# 输出示例:代码执行耗时:0.1234秒

7. 时区转换

场景:将本地时间转换为其他时区的时间。

from datetime import datetime
import pytz

# 本地时间 -> UTC时间
local_time = datetime.now()
utc_time = local_time.astimezone(pytz.utc)
print(f"UTC时间:{utc_time.strftime('%Y-%m-%d %H:%M:%S')}")

# UTC时间 -> 纽约时间
ny_tz = pytz.timezone("America/New_York")
ny_time = utc_time.astimezone(ny_tz)
print(f"纽约时间:{ny_time.strftime('%Y-%m-%d %H:%M:%S')}")

8. 获取月末日期

场景:计算某个月份的最后一天。

from datetime import date
import calendar

def last_day_of_month(year: int, month: int) -> date:
    _, last_day = calendar.monthrange(year, month)
    return date(year, month, last_day)

print(last_day_of_month(2023, 2))  # 输出:2023-02-28
print(last_day_of_month(2024, 2))  # 输出:2024-02-29

9. 解析 ISO 8601 格式日期

场景:处理符合国际标准的日期字符串。

from datetime import datetime

iso_date_str = "2023-10-05T14:30:45+08:00"
dt = datetime.fromisoformat(iso_date_str)
print(dt)  # 输出:2023-10-05 14:30:45+08:00

# 反向生成 ISO 格式
print(dt.isoformat())  # 输出原字符串

10. 时间差统计(精确到分钟)

场景:计算两个时间点之间的分钟数差值。

from datetime import datetime

def minutes_diff(start: str, end: str) -> int:
    fmt = "%Y-%m-%d %H:%M:%S"
    start_time = datetime.strptime(start, fmt)
    end_time = datetime.strptime(end, fmt)
    delta = end_time - start_time
    return delta.total_seconds() // 60

diff = minutes_diff("2023-10-05 09:30:00", "2023-10-05 11:45:00")
print(f"时间差:{diff} 分钟")  # 输出:135 分钟

总结

这些范例覆盖了 datetime 模块的常见需求:

  • 时间计算:年龄、倒计时、月末日期
  • 格式转换:时间戳、ISO 8601、时区
  • 实用工具:日期范围生成、闰年判断、代码计时
  • 业务逻辑:用户年龄验证、数据分析周期统计

通过组合这些方法,可以解决绝大多数日期时间处理问题。进阶场景可结合 dateutilpandas 库进一步扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值