当前位置: 首页 > news >正文

【Python 日期和时间】

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


一、基础模块

1. datetime 模块
  • 核心类:datetime, date, time, timedelta
  • 安装依赖:
    pip install python-dateutil pytz  # 推荐安装增强库
    

二、基础操作

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

三、格式化与解析

1. 格式化输出
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. 解析字符串
date_str = "2025-05-04 14:30:00"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")

四、时区处理

1. 天真时间(Naive Datetime)
naive_dt = datetime.now()  # 不含时区信息(需谨慎使用)
2. 时区感知时间(Aware Datetime)
# 使用 pytz(推荐)
import pytzny_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 ZoneInfotokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
3. 时区转换
utc_dt = datetime.now(pytz.utc)
local_dt = utc_dt.astimezone(pytz.timezone("Asia/Shanghai"))

五、日期计算

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

六、实际应用场景

1. 定时任务
import schedule
import timedef job():print("定时任务执行...")schedule.every().day.at("10:30").do(job)  # 每天10:30执行while True:schedule.run_pending()time.sleep(1)
2. 日期验证
from dateutil.parser import parsedef is_valid_date(date_str):try:parse(date_str)return Trueexcept ValueError:return False
3. 生成时间戳
# 生成13位毫秒时间戳
timestamp = int(datetime.now().timestamp() * 1000)
4. 性能测试
from datetime import datetimestart = datetime.now()
# 执行需要测试的代码...
end = datetime.now()
print(f"耗时: {end - start}")

七、高级技巧

1. 处理模糊时间
from dateutil.parser import parsedt = parse("2025-05-04 14:30", fuzzy=True)  # 允许部分解析
2. 生成时间范围
import pandas as pddate_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. 计算年龄
from datetime import datedef calculate_age(birthdate):today = date.today()age = today.year - birthdate.yearif (today.month, today.day) < (birthdate.month, birthdate.day):age -= 1return age

八、常见陷阱

  1. 时区问题

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

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

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

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

相关文章:

  • DLMS协议 —— System title 详解(作用及结构一览)
  • C# NX二次开发:判断两个体是否干涉和获取系统日志的UFUN函数
  • QT 文件选择对话框 QFileDialog
  • # 如何使用OpenCV进行发票的透视变换和二值化处理
  • 如何观察epoll_threadpool_echo_server 线程的变化
  • 【HarmonyOS 5】App Linking 应用间跳转详解
  • CDN 回源:原理、作用与工作流程
  • 排序算法——基数排序
  • YY/T 1732-2020口腔曲面体层X射线模体
  • Nginx1.26.2安装包编译安装并配置stream模块
  • 101alpha_第6个
  • MYSQL 快速解析
  • k8s术语之DaemonSet
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)
  • Spark缓存--persist方法
  • 【C语言】文件操作(续)
  • AI原生手机:三大技术阵营的终极对决与未来展望
  • MyBatis(进阶)(xml标签)
  • 【Ubuntu】安裝向日葵远程控制
  • React Native基础环境配置
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 汪明荃,今生不负你
  • 4月深圳新房、二手房成交同比均上涨,“5月有望延续积极向好的发展态势”
  • 中俄合拍电影《红丝绸》将于今年9月在中国上映
  • 印巴军事对峙加剧,小规模冲突收场还是走向大战?
  • 今晚上海地铁多条线路加开定点加班车,2号线运营至次日2时