发布于 2026-01-06 0 阅读
0

Python Dateutil 模块警告

Python Dateutil 模块

警告

Python 内置了一个datetime模块,用于以从简单到复杂的方式处理日期和时间。虽然这对于许多用例来说已经足够,但该dateutil模块还提供了强大的扩展功能。我们将探索的一些实用功能包括:

  1. 计算相对变化量(下周一、下周、上个月最后一周、未来五年等等)。🤔
  2. 计算两个给定日期和/或日期时间对象之间的相对差值。🤯

入门指南✊

可以使用 pip 从 PyPI 安装 dateutil:

pip install python-dateutil
Enter fullscreen mode Exit fullscreen mode

或者,如果您使用的是 Python 3:

pip3 install python-dateutil
Enter fullscreen mode Exit fullscreen mode

纵身一跃🙌

添加一些穿越时空的进口商品:

from datetime import *
from dateutil.relativedelta import *
import calendar
Enter fullscreen mode Exit fullscreen mode

要获取当前的日期和时间:

NOW = datetime.now()
print(NOW)
# 2019-12-09 11:32:20.295752
Enter fullscreen mode Exit fullscreen mode

或者只写日期:

TODAY = date.today()
print(TODAY)
# 2019-12-09
Enter fullscreen mode Exit fullscreen mode

下周见:

next_week = TODAY + relativedelta(weeks=+1)
print(next_week)
# 2019-12-16 
Enter fullscreen mode Exit fullscreen mode

或者下个月:

next_month = TODAY + relativedelta(months=+1)
print(next_month)
# 2020-01-09 
Enter fullscreen mode Exit fullscreen mode

我们甚至可以将它们合并起来(下个月加一周):

next_month_plus_one_week = TODAY + relativedelta(months=+1, weeks=+1)
print(next_month_plus_one_week)
# 2020-01-16 
Enter fullscreen mode Exit fullscreen mode

……甚至可以加上时间(下个月加一周,下午1点):

added_time = TODAY + relativedelta(months=+1, weeks=+1, hour=13)
print(added_time)
# 2020-01-16 13:00:00
Enter fullscreen mode Exit fullscreen mode

当然,我们可以倒退

last_week = TODAY + relativedelta(weeks=-1)
print(last_week)
# 2019-12-02

last_month = TODAY + relativedelta(months=-1)
print(last_month)
# 2019-11-09
Enter fullscreen mode Exit fullscreen mode

……我们可以稍微调整一下(在一年前一个月):

one_month_before_one_year = TODAY + relativedelta(years=+1, months=-1)
print(one_month_before_one_year)
# 2020-11-09
Enter fullscreen mode Exit fullscreen mode

顺便说一下,增加一个月永远不会跨越月份的边界:

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
Enter fullscreen mode Exit fullscreen mode

……这种逻辑也适用于年份,即使是闰年也一样:

# 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
Enter fullscreen mode Exit fullscreen mode

我们还可以利用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
Enter fullscreen mode Exit fullscreen mode

我们还可以使用以下方法查找日期yearday

# Get the 237th day of 2020
print(date(2020, 1, 1) + relativedelta(yearday=237))
# 2020-08-24
Enter fullscreen mode Exit fullscreen mode

计算两个日期之间的差值非常简单:

# 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)
Enter fullscreen mode Exit fullscreen mode

……而且格式化也非常简单:

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 🚀
Enter fullscreen mode Exit fullscreen mode

资料来源:
🐍 https://dateutil.readthedocs.io/en/stable/
🚀 https://en.wikipedia.org/wiki/NASA

文章来源:https://dev.to/ejbarba/python-dateutil-module-4m03