最近刚接触项目组内的python项目,发现全部的时间格式都是用的iso8601,同事美其名曰说是为了项目的国际化(其实用户量最多几百人吧,还都集中在公司内部,哪来的国际化,哈哈哈哈!)。因此决定对该时间格式深刻研究下,发现了python中的dateutil模块。
DATETIME转ISO8601格式,直接用isoformat()方法转便可html
now_time = datetime.now().isoformat()
输出为python
2018-12-04T08:44:35.792445
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
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) + '天')
能够直接计算我本身出生多少天了,输出为code
我已经出生9758天
可是若是我要计算我多大了,也就是出生多少年,会出现什么状况呢?orm
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'
很遗憾,报错了,由于timedelta中没有获取年份和月份的方法,因此咱们继续使用dateutil模块htm
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
from dateutil.rrule import rrule, WEEKLY pp(list(rrule(WEEKLY, count=10, dtstart=next_tuesday)))
输出为get
[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必须是是时间格式源码
更多关于dateutil的例子能够从如下网站学习
https://dateutil.readthedocs....