当前位置: 首页 > 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
    

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

http://www.xdnf.cn/news/338797.html

相关文章:

  • 【redis】集群模式
  • Windows命令行软件管理器:Chocolatey
  • 多级路由器如何避免IP冲突
  • 使用JAVA对接Deepseek API实现首次访问和提问
  • Linux网络编程day7 线程池
  • 因子分析——数学原理及R语言代码
  • flinksql bug : Max aggregate function does not support type: CHAR
  • 援外培训项目冈比亚数字政府能力建设研修班莅临麒麟信安参观考察
  • Ubuntu每次开机IP都是127.0.0.1
  • Debian系统详解
  • linux命令行与shell脚本大全——学习笔记(9-10章)
  • ABP vNext + Dapr 实现云原生微服务治理
  • Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
  • C++类和对象:构造函数、析构函数、拷贝构造函数
  • 服务器配置llama-factory问题解决
  • javaer快速从idea转战vscode
  • 【Java ee 初阶】文件操作和IO(上)
  • 经验:从CAN到以太网为主的车载网络架构升级
  • 实时云渲染——比像素流送节省80%精力的UE程序推流技术
  • 网盘解析工具更新,支持UC网盘!!
  • 配置VS的DLL文件引用目录(两种方案,无需每次生成dll后手动将其复制到exe目录下)
  • vue2 两种路由跳转方式
  • window 显示驱动开发-处理内存段(二)
  • C++GO语言微服务基础技术①
  • IDEA 2024 版本配置热部署
  • 【计算机网络】--tcp三次握手
  • 【Pandas】pandas DataFrame ewm
  • 2024年 AI大模型我该买一张什么显卡?
  • 好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端
  • 最新Spring Security实战教程(十四)OAuth2.0精讲 - 四种授权模式与资源服务器搭建