登录  /  注册

Python中dateutil模块的理解(附示例)

不言
发布: 2018-12-04 17:30:46
转载
6013人浏览过

本篇文章给大家带来的内容是关于Python中dateutil模块的理解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

最近刚接触项目组内的python项目,发现所有的时间格式都是用的iso8601,同事美其名曰说是为了项目的国际化(其实用户量最多几百人吧,还都集中在公司内部,哪来的国际化,哈哈哈哈!)。所以决定对该时间格式深入研究下,发现了python中的dateutil模块。

DATETIME转ISO8601格式,直接用isoformat()方法转即可

now_time = datetime.now().isoformat()
登录后复制

输出为

2018-12-04T08:44:35.792445
登录后复制
  • 从字符串解析DATETIME格式(不用dateutil模块)

now_date_str = datetime.now().isoformat().split('.')[0]
my_format = '%Y-%m-%dT%H:%M:%S'
print(datetime.strptime(now_date_str, my_format))
登录后复制

这是python中最常用的将字符串转成时间格式的方法,输出结果为

2018-12-04 08:44:35
登录后复制
  • 使用dateutil解析字符串

from dateutil.parser import parse
timestamp = parse(now_date_str, fuzzy=True)
print(timestamp)
登录后复制

输出结果同上,但这个parse方法中的fuzzy很神奇,可以模糊匹配时间格式,感兴趣的可以看下源码哈!

  • 计算时间差

today = date.today()
my_birthday = date(year=1992, month=3, day=17)
print('我已经出生' + str((today - my_birthday).days) + '天')
登录后复制

可以直接计算我自己出生多少天了,输出为

我已经出生9758天
登录后复制

但是如果我要计算我多大了,也就是出生多少年,会出现什么情况呢?

Traceback (most recent call last):
2018-12-04 08:57:08
  File "F:/pythonProject/testcode/testDate.py", line 27, in <module>
    print((today-my_birthday).years)
2018-12-04 08:57:08
AttributeError: 'datetime.timedelta' object has no attribute 'years'</module>
登录后复制

很遗憾,报错了,因为timedelta中没有获取年份和月份的方法,所以我们继续使用dateutil模块

from dateutil.relativedelta import relativedelta
diff = relativedelta(today, my_birthday)
登录后复制

通过输出可以发现,我们能获取到两个日期中间相差几年,几个月和几天

relativedelta(years=+26, months=+8, days=+17)
登录后复制
print(diff.years)
print(diff.months)
print(diff.days)
登录后复制
26
8
17
登录后复制
  • 获取日期列表,如果需要获取连续五周周二的日期,通过dateutil可以很容易实现

from dateutil.rrule import rrule, WEEKLY
pp(list(rrule(WEEKLY, count=10, dtstart=next_tuesday)))
登录后复制

输出为

[datetime.datetime(2018, 12, 4, 8, 59, 6),
 datetime.datetime(2018, 12, 11, 8, 59, 6),
 datetime.datetime(2018, 12, 18, 8, 59, 6),
 datetime.datetime(2018, 12, 25, 8, 59, 6),
 datetime.datetime(2019, 1, 1, 8, 59, 6),
 datetime.datetime(2019, 1, 8, 8, 59, 6),
 datetime.datetime(2019, 1, 15, 8, 59, 6),
 datetime.datetime(2019, 1, 22, 8, 59, 6),
 datetime.datetime(2019, 1, 29, 8, 59, 6),
 datetime.datetime(2019, 2, 5, 8, 59, 6)]
登录后复制

注意:dtstart必须是是时间格式

以上就是Python中dateutil模块的理解(附示例)的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号