Python3中对时间的处理(持续更新ing...)

诸神缄默不语-个人优快云博文目录

本文介绍Python3中各种处理时间的库和使用方案

1. datetime库

官方文档:datetime — Basic date and time types — Python 3.11.3 documentation

  1. datetime.datetime.now()
  2. datetime.datetime.today()
  3. 将字符串转换为datetime对象:
    datetime.datetime.strptime(字符串, date_format)(第二个入参是时间格式,具体规则和示例见下两条)
    代码示例,计算两个日期之间相隔的天数和月数:
    import datetime
    def days(str1,str2):
        date1=datetime.datetime.strptime(str1,"%Y-%m-%d")
        date2=datetime.datetime.strptime(str2,"%Y-%m-%d")
        num=(date1-date2).days
        return num
     
    def months(str1,str2):
        year1=datetime.datetime.strptime(str1,"%Y-%m-%d").year
        year2=datetime.datetime.strptime(str2,"%Y-%m-%d").year
        month1=datetime.datetime.strptime(str1,"%Y-%m-%d").month
        month2=datetime.datetime.strptime(str2,"%Y-%m-%d").month
        num=(year1-year2)*12+(month1-month2)
        return num
    
    print(days('2023-5-18','2023-5-10'))
    print(days('2023-5-18','2021-5-10'))
    
    输出:
    8
    738
    
  4. date_format示例:
    "%Y-%m-%d"
    %Y-%m-%dT%H:%M:%SZ
  5. %Y: 四位数的年份(例如2025)
    %m: 两位数的月份(01到12)
    %d: 两位数的日期(01到31)
    在Linux上,使用%-d可以去掉前导零,Windows上使用%#d。也可以这样写:f"{dt.year}年{dt.month}月{dt.day}日"
  6. datetime对象
    1. 转换成date对象:dt.strftime("%Y-%m-%d") / dt.date()

2. time库

  1. time.time():返回当前时间(float值)
  2. time.localtime(secs):返回本地时间(struct_time对象)
  3. time.sleep(秒数):睡眠指定时间
  4. time.strftime(r"%Y%m%d%H%M", current_time):将struct_time对象转换为指定字符串格式

3. JioNLP库:(中文)从文本中提取时间信息

通过正则表达式来提取的。

安装方式:pip install jionlp

时间语义解析 说明文档 · dongrixinyu/JioNLP Wiki · GitHub
在线demo:http://www.jionlp.com/jionlp_online/extract_time

示例代码:

import time
import jionlp as jio
time_text_list = ['2021年前两个季度', '从2018年12月九号到十五号', '2019年感恩节', '每周六上午9点到11点', '30~90日']
for time_text in time_text_list:
    print(jio.parse_time(time_text, time_base=time.time()))

输出:

# jionlp - 微信公众号: JioNLP  Github: `https://github.com/dongrixinyu/JioNLP`.
# jiojio - `http://www.jionlp.com/jionlp_online/cws_pos` is available for online trial.
# jiojio - Successfully load C funcs for CWS and POS acceleration.
{'type': 'time_span', 'definition': 'accurate', 'time': ['2021-01-01 00:00:00', '2021-06-30 23:59:59']}
{'type': 'time_span', 'definition': 'accurate', 'time': ['2018-12-09 00:00:00', '2018-12-15 23:59:59']}
{'type': 'time_point', 'definition': 'accurate', 'time': ['2019-11-28 00:00:00', '2019-11-28 23:59:59']}
{'type': 'time_period', 'definition': 'accurate', 'time': {'delta': {'day': 7}, 'point': {'time': ['2023-06-03 09:00:00', '2023-06-03 11:00:00'], 'string': '周六上午9点到11点'}}}
{'type': 'time_delta', 'definition': 'blur', 'time': [{'day': 30.0}, {'day': 90.0}]}

可以看文档,time_span大概指时间段(头尾都是具体时间),time_point是时间点,time_period是时间周期,time_delta是时间长度。

4. datefinder库:(英文)从文本中提取时间信息

pypi网址:datefinder · PyPI
pip安装方式:pip install datefinder

示例代码:

dt=list(datefinder.find_dates("ASPLOS会议的官网是https://www.asplos-conference.org/,2023年论文提交截止时间是2022年10月20日。"))

返回一个由datetime对象组成的list。

5. pytz库

有一说一,我其实没看懂这个库在干啥,大概是统一时区之类的?
反正有一些别的包在安装时会顺便要求装上的。
pytz · PyPI

6. python-duckling

还没用过,先列出

https://github.com/FraBle/python-duckling
Python常见实体提取库Duckling,多语言,实体如日期、金额、距离_duckling python-优快云博客

↑是这个包的Python包:https://github.com/facebookarchive/duckling_old

↑这个包的新版:https://github.com/facebook/duckling

↑这个包的Python包:https://github.com/duckling-python-wrapper/fb_duckling

(反正就是这个更新迭代史已经扭成一股麻花了……)

7. Time-NLP

还没用过,先列出

https://github.com/zhanzecheng/Time_NLP
https://pypi.org/project/ChineseTimeNLP/

↑2个都是这个包的Python包:https://github.com/bububa/TimeNLP

8. WeTextProcessing

还没用过,先列出

https://github.com/wenet-e2e/WeTextProcessing

9. dateutil库

是一个datetime库的扩展。

官方文档:dateutil - powerful extensions to datetime — dateutil 3.9.0 documentation

安装命令:pip install python-dateutil

示例代码,计算指定日期距离下一个复活节有多远(答案是6个月):

from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.rrule import *
from dateutil.parser import *
from datetime import *
now = parse("Sat Oct 11 17:13:46 UTC 2003")
today = now.date()
year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year
rdelta = relativedelta(easter(year), today)
print("Today is: %s" % today)
#输出:Today is: 2003-10-11
print("Year with next Aug 13th on a Friday is: %s" % year)
#输出:Year with next Aug 13th on a Friday is: 2004
print("How far is the Easter of that year: %s" % rdelta)
#输出:How far is the Easter of that year: relativedelta(months=+6)
print("And the Easter of that year is: %s" % (today+rdelta))
#输出:And the Easter of that year is: 2004-04-11

1. relativedelta

文档:https://dateutil.readthedocs.io/en/stable/relativedelta.html

可以作为增减时间的用时间段,示例代码:

from datetime import datetime
from dateutil.relativedelta import relativedelta, MO
dt = datetime(2018, 4, 9, 13, 37, 0)
delta = relativedelta(hours=25, day=1, weekday=MO(1))
dt + delta

输出:

datetime.datetime(2018, 4, 2, 14, 37)
<think>嗯,用户让我写一份精通Python的详细学习规划。首先,我得考虑用户的需求。他们可能是一个刚开始学习Python的新手,或者已经有一定基础,但想要系统提升到精通水平。需要明确学习路径的不同阶段,覆盖Python的核心知识点,以及实际应用和进阶内容。 首先,我应该从基础开始,比如环境搭建、基础语法、数据结构。这部分是任何学习者的起点,必须扎实。然后进入中级阶段,包括函数、模块、文件操作、OOP、异常处理等。这部分是构建更复杂程序的基础。 接下来是高级部分,可能需要包括并发编程、元编程、性能优化、设计模式等。这些内容对于精通Python来说很重要,但可能对新手来说有点挑战,所以需要分阶段学习。 然后,应用方向部分,用户可能有不同的兴趣领域,比如Web开发、数据分析、自动化运维等,应该列出几个主流方向,供用户选择深入学习。 最后,持续提升部分,包括参与开源项目、算法训练、源码阅读等,帮助用户达到精通水平。还要推荐学习资源和常见问题,这样用户有更多参考资料。 需要确保每个阶段都有明确的目标和内容,并且给出合理的时间建议。同时,相关问题的部分要考虑用户可能接下来会问的问题,比如每个阶段的具体知识点或如何选择方向。 可能用户没有明确说明自己的当前水平,所以学习规划需要全面,覆盖从基础到精通的各个阶段。另外,时间分配要合理,不能太紧凑,也不能太松散,根据一般学习进度给出建议。 还要注意代码示例,比如在基础部分展示变量和循环,中级部分展示函数和类,高级部分展示生成器或装饰器。这样用户能直观看到每个阶段的应用。 最后,相关问题需要围绕学习路径中的各个主题,比如基础语法、OOP、并发编程等,帮助用户进一步深入了解每个部分。</think><< 精通Python的详细学习规划(6-12个月体系化路径) 一、基础夯实阶段(1-2个月) 1. 环境搭建与基础语法 - 安装Python解释器(推荐3.11+版本) - 掌握变量/数据类型/运算符 - 流程控制(if/for/while) - 列表推导式/生成器表达式 代码示例: ```python # 列表推导式示例 squares = [x**2 for x in range(10) if x % 2 == 0] print(squares) # [0, 4, 16, 36, 64] ``` 2. 核心数据结构 - 字符串操作与格式化 - 列表/元组/字典/集合 - 迭代器与可迭代对象 3. 函数基础 - 参数传递机制(位置/关键字参数) - lambda表达式 - 作用域与闭包 二、中级提升阶段(2-3个月) 1. 面向对象编程 - 类与实例 - 继承与多态 - 魔术方法 代码示例: ```python class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) ``` 2. 模块与包管理 - 标准库常用模块(os/sys/re等) - 虚拟环境管理(venv/pipenv) - 打包与发布(setup.py) 3. 异常处理与调试 - try/except/finally结构 - 自定义异常类 - pdb调试器使用 三、高级进阶阶段(3-4个月) 1. 并发编程 - 多线程(threading) - 多进程(multiprocessing) - 异步IO(asyncio) 代码示例: ```python import asyncio async def fetch_data(): await asyncio.sleep(1) return "data" async def main(): result = await asyncio.gather(fetch_data(), fetch_data()) print(result) asyncio.run(main()) ``` 2. 元编程 - 装饰器开发 - 元类应用 - 描述符协议 3. 性能优化 - 内存分析(memory_profiler) - 性能剖析(cProfile) - C扩展开发(Cython) 四、专项应用方向(选择1-2个方向深入) 1. Web开发方向 - Flask/Django框架 - REST API开发 - 数据库集成(SQLAlchemy) 2. 数据分析方向 - NumPy/Pandas - Matplotlib/Seaborn - Scikit-learn基础 3. 自动化运维方向 - Ansible/SaltStack - 监控系统开发 - 日志分析处理 五、持续提升阶段 1. 参与开源项目(GitHub) 2. LeetCode算法训练(每日1题) 3. CPython源码阅读 4. 技术社区贡献(PyPI包发布) 推荐学习资源: - 官方文档(docs.python.org) - 《流畅的Python》 - Real Python教程 - CPython源码解读 常见问题解决方案: - 虚拟环境冲突 → 使用poetry管理依赖 - 内存泄漏 → 使用objgraph分析引用 - GIL限制 → 多进程或asyncio方案 - 版本兼容 → 使用type hints和tox测试 学习建议: - 每日编码1小时(保持手感) - 建立个人代码库(Git管理) - 参加技术会议(PyCon) - 定期代码审查(结对编程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值