【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

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

相关推荐
Ronin30517 分钟前
【C++】类型转换
开发语言·c++
之歆31 分钟前
Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
笔记·python·学习
mrbone1133 分钟前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
浪裡遊44 分钟前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
真实的菜1 小时前
JVM类加载系统详解:深入理解Java类的生命周期
java·开发语言·jvm
代码讲故事1 小时前
多种方法实现golang中实现对http的响应内容生成图片
开发语言·chrome·http·golang·图片·快照·截图
天天爱吃肉82181 小时前
ZigBee通信技术全解析:从协议栈到底层实现,全方位解读物联网核心无线技术
python·嵌入式硬件·物联网·servlet
虾球xz2 小时前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
Allen_LVyingbo2 小时前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗
小哈龙2 小时前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash