【Python 日期和时间】

Python 中处理日期和时间主要依赖 datetime 模块,结合 dateutilpytz 等第三方库可实现更复杂的需求。以下是日期和时间处理的核心知识点:


一、基础模块

1. datetime 模块
  • 核心类:datetime, date, time, timedelta

  • 安装依赖:

    bash 复制代码
    pip install python-dateutil pytz  # 推荐安装增强库

二、基础操作

1. 获取当前时间
python 复制代码
from datetime import datetime, date, time

now = datetime.now()      # 当前日期时间 → 2025-05-04 14:30:00.123456
today = date.today()      # 当前日期 → 2025-05-04
current_time = time()     # 当前时间 → 14:30:00.123456
2. 创建指定时间
python 复制代码
dt = datetime(2025, 5, 4, 14, 30, 0)  # 指定年月日时分秒
3. 时间戳转换
python 复制代码
timestamp = datetime.now().timestamp()  # → 1748896200.123456(Unix时间戳)
dt_from_ts = datetime.fromtimestamp(1748896200)  # 时间戳转datetime

三、格式化与解析

1. 格式化输出
python 复制代码
now = datetime.now()
formatted = now.strftime("%Y-%m-%d %H:%M:%S")  # → "2025-05-04 14:30:00"

常用格式代码

  • %Y:4位年份(2025)
  • %m:2位月份(01-12)
  • %d:2位日期(01-31)
  • %H:24小时制小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)
  • %A:星期全称(Monday)
  • %B:月份全称(January)
2. 解析字符串
python 复制代码
date_str = "2025-05-04 14:30:00"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")

四、时区处理

1. 天真时间(Naive Datetime)
python 复制代码
naive_dt = datetime.now()  # 不含时区信息(需谨慎使用)
2. 时区感知时间(Aware Datetime)
python 复制代码
# 使用 pytz(推荐)
import pytz

ny_tz = pytz.timezone("America/New_York")
ny_time = datetime.now(ny_tz)  # → 2025-05-04 02:30:00-04:00(含时区信息)

# Python 3.9+ 使用 zoneinfo
from zoneinfo import ZoneInfo

tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
3. 时区转换
python 复制代码
utc_dt = datetime.now(pytz.utc)
local_dt = utc_dt.astimezone(pytz.timezone("Asia/Shanghai"))

五、日期计算

1. 时间差计算
python 复制代码
delta = timedelta(days=7, hours=3)
future_dt = now + delta  # 7天3小时后
diff = future_dt - now    # → 7 days, 3:00:00
2. 常用属性
python 复制代码
dt = datetime(2025, 5, 4, 14, 30)
dt.year    # → 2025
dt.month   # → 5
dt.weekday()  # → 6(周一=0,周日=6)

六、实际应用场景

1. 定时任务
python 复制代码
import schedule
import time

def job():
    print("定时任务执行...")

schedule.every().day.at("10:30").do(job)  # 每天10:30执行

while True:
    schedule.run_pending()
    time.sleep(1)
2. 日期验证
python 复制代码
from dateutil.parser import parse

def is_valid_date(date_str):
    try:
        parse(date_str)
        return True
    except ValueError:
        return False
3. 生成时间戳
python 复制代码
# 生成13位毫秒时间戳
timestamp = int(datetime.now().timestamp() * 1000)
4. 性能测试
python 复制代码
from datetime import datetime

start = datetime.now()
# 执行需要测试的代码...
end = datetime.now()
print(f"耗时: {end - start}")

七、高级技巧

1. 处理模糊时间
python 复制代码
from dateutil.parser import parse

dt = parse("2025-05-04 14:30", fuzzy=True)  # 允许部分解析
2. 生成时间范围
python 复制代码
import pandas as pd

date_range = pd.date_range(start="2025-05-01", end="2025-05-05", freq="D")
# → DatetimeIndex(['2025-05-01', '2025-05-02', ..., '2025-05-05'], dtype='datetime64[ns]', freq='D')
3. 计算年龄
python 复制代码
from datetime import date

def calculate_age(birthdate):
    today = date.today()
    age = today.year - birthdate.year
    if (today.month, today.day) < (birthdate.month, birthdate.day):
        age -= 1
    return age

八、常见陷阱

  1. 时区问题

    • 避免混合使用不同时区的时间
    • 始终明确处理时区(不要假设本地时间)
  2. 月份范围

    python 复制代码
    # 错误示例:datetime(2025, 13, 1) 会报错
    # 正确做法:验证月份范围(1-12)
  3. 闰年处理

    python 复制代码
    # 自动处理闰年(如2月29日)
    dt = datetime(2024, 2, 29)  # 2024是闰年
    dt = datetime(2025, 2, 28) + timedelta(days=1)  # → 2025-03-01

通过掌握这些内容,可以高效处理从简单日期显示到复杂时区转换的各种场景。实际应用中需根据需求选择合适的方法,并特别注意时区一致性和日期有效性验证。

相关推荐
极小狐26 分钟前
如何使用极狐GitLab 软件包仓库功能托管 ruby?
开发语言·数据库·人工智能·git·机器学习·gitlab·ruby
大G哥26 分钟前
Kotlin Lambda语法错误修复
android·java·开发语言·kotlin
Pythonliu736 分钟前
启智平台调试 qwen3 4b ms-swift
开发语言·swift
zx4338 分钟前
聚类后的分析:推断簇的类型
人工智能·python·机器学习·聚类
RunsenLIu1 小时前
基于Django实现的篮球论坛管理系统
后端·python·django
行走__Wz1 小时前
计算机学习路线与编程语言选择(信息差)
java·开发语言·javascript·学习·编程语言选择·计算机学习路线
-代号95271 小时前
【JavaScript】二十九、垃圾回收 + 闭包 + 变量提升
开发语言·javascript·ecmascript
COOCC11 小时前
PyTorch 实战:从 0 开始搭建 Transformer
人工智能·pytorch·python·深度学习·算法·机器学习·transformer
谷雪_6581 小时前
鼠标交互初体验:点击屏幕生成彩色气泡(EGE 库基础)
c语言·开发语言·microsoft·交互
sword devil9001 小时前
加速项目落地(Trae编辑器)
python·编辑器·辅助开发