Python Dateutil 模块
警告
Python 内置了一个datetime模块,用于以从简单到复杂的方式处理日期和时间。虽然这对于许多用例来说已经足够,但该dateutil模块还提供了强大的扩展功能。我们将探索的一些实用功能包括:
- 计算相对变化量(下周一、下周、上个月最后一周、未来五年等等)。🤔
- 计算两个给定日期和/或日期时间对象之间的相对差值。🤯
入门指南✊
可以使用 pip 从 PyPI 安装 dateutil:
pip install python-dateutil
或者,如果您使用的是 Python 3:
pip3 install python-dateutil
纵身一跃🙌
添加一些穿越时空的进口商品:
from datetime import *
from dateutil.relativedelta import *
import calendar
要获取当前的日期和时间:
NOW = datetime.now()
print(NOW)
# 2019-12-09 11:32:20.295752
或者只写日期:
TODAY = date.today()
print(TODAY)
# 2019-12-09
下周见:
next_week = TODAY + relativedelta(weeks=+1)
print(next_week)
# 2019-12-16
或者下个月:
next_month = TODAY + relativedelta(months=+1)
print(next_month)
# 2020-01-09
我们甚至可以将它们合并起来(下个月加一周):
next_month_plus_one_week = TODAY + relativedelta(months=+1, weeks=+1)
print(next_month_plus_one_week)
# 2020-01-16
……甚至可以加上时间(下个月加一周,下午1点):
added_time = TODAY + relativedelta(months=+1, weeks=+1, hour=13)
print(added_time)
# 2020-01-16 13:00:00
当然,我们可以倒退:
last_week = TODAY + relativedelta(weeks=-1)
print(last_week)
# 2019-12-02
last_month = TODAY + relativedelta(months=-1)
print(last_month)
# 2019-11-09
……我们可以稍微调整一下(在一年前一个月):
one_month_before_one_year = TODAY + relativedelta(years=+1, months=-1)
print(one_month_before_one_year)
# 2020-11-09
顺便说一下,增加一个月永远不会跨越月份的边界:
print(date(2020, 1, 27) + relativedelta(months=+1))
# 2020-02-27
print(date(2020, 1, 31) + relativedelta(months=+1))
# 2020-02-29 (2020 is a leap year! #todayilearned)
print(date(2020, 1, 31) + relativedelta(months=+2))
#2020-03-31
……这种逻辑也适用于年份,即使是闰年也一样:
# Note that 2020 is a leap year
print(date(2020, 2, 28) + relativedelta(years=+1))
# 2021-02-28
print(date(2020, 2, 29) + relativedelta(years=+1))
# 2021-02-28
# Subtracting 1 year from Feb 29 2020 will print Feb 28 2019
print(date(2020, 2, 29) + relativedelta(years=-1))
# 2019-02-28
我们还可以利用weekdays:
# Note that TODAY is a Monday
this_TGIF = TODAY + relativedelta(weekday=FR)
print(this_TGIF)
# 2019-12-13
# Tuesday of next week, not tomorrow
next_tuesday = TODAY + relativedelta(weeks=+1, weekday=TU)
print(next_tuesday)
#2019-12-17
# Making use of the calendar import
next_tuesday_calendar = TODAY + relativedelta(weeks=+1, weekday=calendar.TUESDAY)
print(next_tuesday_calendar)
# 2019-12-17
我们还可以使用以下方法查找日期yearday:
# Get the 237th day of 2020
print(date(2020, 1, 1) + relativedelta(yearday=237))
# 2020-08-24
计算两个日期之间的差值非常简单:
# Setting the date
# year - month - day - hour - minutes
nasa_birthday = datetime(1958, 7, 29, 0, 0)
age_of_nasa = relativedelta(TODAY, nasa_birthday)
print(age_of_nasa)
# relativedelta(years=+61, months=+4, days=+10)
……而且格式化也非常简单:
print('It has been {} years, {} months and {} days since the birth of NASA 🚀'
.format(age_of_nasa.years,
age_of_nasa.months,
age_of_nasa.days,))
#It has been 61 years, 4 months and 10 days since the birth of NASA 🚀
资料来源:
🐍 https://dateutil.readthedocs.io/en/stable/
🚀 https://en.wikipedia.org/wiki/NASA