Python中的Dateutil模块
Python dateutil模块简介
每当我们开始使用需要实时数据的脚本时,我们必须使用dateutil模块来在特定时间检索或安排数据,或者使用检索时间戳的输入数据。
在使用默认的datetime模块来处理日期和时间格式的许多脚本并尝试更改检索到的数据时,这可能是一项艰巨的任务。
幸运的是,开发人员创建了dateutil模块以简化生活。
在接下来的教程中,我们将深入了解Python dateutil模块。Python模块是由一些定义和语句组成的文件。我们可以使用这些模块将一个大程序分解成小段,并将它们导入程序以使用它们的函数。dateutil模块是Python编程语言中的预定义模块之一,用于执行与特定日期和时间相关的工作。
所以,让我们开始吧。
了解Python dateutil模块
Python编程语言中有一个名为datetime的核心模块。我们使用此模块从简单到复杂的方法来操作日期和时间。尽管此模块对于特定数量的实例是足够的,但是Python dateutil模块为datetime模块提供了一些强大的扩展功能。
Python dateutil模块的主要特点
Python dateutil模块的主要特点如下:
- dateutil模块支持解析任何字符串格式的日期。
- 此模块提供了内部最新的世界时区详情。
- 此模块有助于计算相对增量。
- 此模块还有助于基于相当灵活的重复规则计算日期。
如何在Python中安装dateutil模块
在开始使用dateutil模块之前,首要目标是在系统上安装该模块。所以,让我们开始安装过程。
我们将使用pip安装程序来安装所需的模块,只需在终端中输入以下命令即可:
语法:
$ pip install python-dateutil
验证安装
为了检查模块是否已正确安装在系统中,我们可以尝试导入模块并执行程序。
安装完成后,创建一个新的Python文件,并在其中输入以下语法。
示例:
# importing the required module
import dateutil
现在,保存文件并使用以下命令在命令提示符中运行文件。
语法:
$ python <file-name>.py
如果程序运行时没有引发任何导入错误,表示该模块已正确安装。否则建议重新安装该模块并参考其官方文档。
使用Python dateutil模块
现在,让我们开始使用Python编程语言中的dateutil模块。
dateutil模块及其子类
dateutil模块分为几个子类,如下所示:
- easter,
- parser,
- relativedelta,
- rrule,
- tz以及其它等等。
该模块并不包含太多的子类;不过,在本教程中,我们只会探索其中一些子类的功能。
导入所需模块
由于我们已经正确安装了该模块,现在是时候将方法付诸行动并获取输出了。
要开始使用Python dateutil模块和其中一些方法,我们只需要首先导入它们。
下面是导入所需模块的语法。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
解释:
在上面的代码片段中,我们导入了datetime模块以导入方法。然后,我们从dateutil子类中导入了一些方法。
日期时间功能
在开始dateutil模块的编码部分之前,我们必须了解该模块依赖于datetime模块。
Python中的dateutil模块与datetime对象一起工作,这意味着我们在开始使用它们之前必须创建datetime对象。
因此,导入datetime模块变得必要。现在,让我们开始使用dateutil模块中的一些方法。
Datetime和relativedelta
relativedelta子类扩展了datetime模块,为程序员提供了与检索到的详细信息相关的日期和时间操作功能。
这个语句表示我们可以将天数、月份或者年数插入到当前使用的datetime对象中。它还使程序员能够使用datetime对象来处理时间间隔。
让我们考虑以下示例以更好地理解这个概念。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# Creating some datetime objects
present_datetime = datetime.datetime.now()
print("The Present datetime:", present_datetime)
present_date = datetime.date.today()
print("The Present date:", present_date)
输出:
The Present datetime: 2021-10-20 12:38:19.319256
The Present date: 2021-10-20
解释:
在上面的代码片段中,我们导入了所需的模块并创建了datetime模块的对象,以获取当前日期和时间的详细信息。然后,我们将这些详细信息打印给用户。
现在,让我们利用相对日期的帮助来获取信息。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# Creating some datetime objects
present_datetime = datetime.datetime.now()
present_date = datetime.date.today()
# Next month
print("Next month:", present_datetime + relativedelta(months =+ 1))
# Next month, and a week
print("Next month, and a week:", present_datetime + relativedelta(months =+ 1, weeks =+ 1))
# Next month, and a week, at 4 PM
print("Next month, plus one week, at 4 PM:", present_datetime + relativedelta(months =+ 1, weeks =+ 1, hour = 16))
# Next Friday
print("Next Friday:", present_date + relativedelta(weekday = FR))
输出:
Next month: 2021-11-20 12:54:38.805725
Next month, and a week: 2021-11-27 12:54:38.805725
Next month, plus one week, at 4 PM: 2021-11-27 16:54:38.805725
Next Friday: 2021-10-22
解释:
在上面的代码片段中,我们导入所需的模块,并使用当前日期和时间的值来查找与相对差值(如下个月的日期和时间,一个月和一周后的日期和时间,在下午4点的一个月和一周后的日期和即将到来的星期五的日期)相关的信息。
这个模块的一个更实际的用途是通过一些小操作来找到信息。
让我们考虑以下示例来理解这个模块的用法。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# Creating some datetime objects
present_datetime = datetime.datetime.now()
present_date = datetime.date.today()
# Finding out the last Monday in the month
print("Last Monday:",present_date + relativedelta(day = 31, weekday = MO(-1)))
# We can also work with datetime objects directly
# Example: Age of David
david_birthday = datetime.datetime(1983, 5, 23, 12, 0)
print("David's Age:", relativedelta(present_datetime, david_birthday).years)
输出:
Last Monday: 2021-10-25
David's Age: 38
解释:
在上面的代码片段中,我们已经导入了所需的模块。然后,我们使用当前日期和时间的值来找到关于月末或某人年龄的信息,根据他们的生日。
日期时间和复活节
复活节 子类用于估计具有通用复活节日历的日期和时间,允许程序员根据各种日历计算日期时间对象。
这个子类非常小,只有一个参数,并且有三个选项,定义了整个模块。
茱蒂亚历, EASTER_JULIAN = 1
格里历, EASTER_ORTHODOX = 2
西方日历, EASTER_WESTERN = 3
让我们考虑以下示例来了解上述日历的工作原理。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# The Julian Calendar
print("Julian Calendar:", easter(1335, 1))
# The Gregorian Calendar
print("Gregorian Calendar:", easter(1335, 2))
# The Western Calendar
print("Western Calendar:", easter(1335, 3))
输出:
Julian Calendar: 1335-04-16
Gregorian Calendar: 1335-04-26
Western Calendar: 1335-04-17
解释:
在上面的代码片段中,我们导入了所需的模块,并使用 easter 子类以不同的日历格式打印日期。
日期和解析器
解析器 子类被用作一个优秀的日期和时间字符串解析器。这个子类能够解析多个已知的日期或时间格式。
让我们考虑以下示例来理解这一点。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# The parser subclass
print(parse("Thu Oct 25 11:36:28 BRST 2005"))
# We can also ignore the timezone which is set to default locally
print(parse("Thu Oct 25 11:36:28 BRST 2005", ignoretz = True))
# We can also not provide a timezone, or a year
# This allows for it to return the current year, with no timezone inclusion.
print(parse("Thu Oct 25 11:36:28"))
# We can also provide variables which consist of the information, as values.
DEFAULT = datetime.datetime(2021, 10, 23)
print(parse("11:36", default = DEFAULT))
输出:
2005-10-25 11:36:28
2005-10-25 11:36:28
2021-10-25 11:36:28
2021-10-23 11:36:00
说明:
在上面的代码片段中,我们再次导入了所需的模块,并使用了 parser 子类来解析日期和时间字符串。
我们可以提供许多选择,包括使用时区、本地或明确设置。
我们可以使用传递给函数的变量作为默认参数来提取详细信息,以便提供时区、年份和时间。
日期时间和rrule
rrule 子类用于收集与 datetime 对象的重复以及 datetime 对象本身相关的信息。
让我们考虑以下示例来理解这个问题。
示例:
# importing methods from the datetime module as a base.
import datetime
# importing several methods from the dateutil subclasses.
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.parser import *
from dateutil.rrule import *
# The rrule subclass
# Daily repetition for 15 occurrences
print(list(rrule(DAILY, count = 15, dtstart = parse("20210925T091000"))))
# Repeating based on the interval
print(list(rrule(DAILY, interval = 8, count = 4, dtstart = parse("20210925T091000"))))
# Weekly repetition
print(list(rrule(WEEKLY, count = 5, dtstart = parse("20210925T091000"))))
# Monthly repetition
print(list(rrule(MONTHLY, count = 5, dtstart = parse("20210925T091000"))))
# Yearly repetition
print(list(rrule(YEARLY, count = 5, dtstart = parse("20210925T091000"))))
输出:
[datetime.datetime(2021, 9, 25, 9, 10), datetime.datetime(2021, 9, 26, 9, 10), datetime.datetime(2021, 9, 27, 9, 10), datetime.datetime(2021, 9, 28, 9, 10), datetime.datetime(2021, 9, 29, 9, 10), datetime.datetime(2021, 9, 30, 9, 10), datetime.datetime(2021, 10, 1, 9, 10), datetime.datetime(2021, 10, 2, 9, 10), datetime.datetime(2021, 10, 3, 9, 10), datetime.datetime(2021, 10, 4, 9, 10), datetime.datetime(2021, 10, 5, 9, 10), datetime.datetime(2021, 10, 6, 9, 10), datetime.datetime(2021, 10, 7, 9, 10), datetime.datetime(2021, 10, 8, 9, 10), datetime.datetime(2021, 10, 9, 9, 10)]
[datetime.datetime(2021, 9, 25, 9, 10), datetime.datetime(2021, 10, 3, 9, 10), datetime.datetime(2021, 10, 11, 9, 10), datetime.datetime(2021, 10, 19, 9, 10)]
[datetime.datetime(2021, 9, 25, 9, 10), datetime.datetime(2021, 10, 2, 9, 10), datetime.datetime(2021, 10, 9, 9, 10), datetime.datetime(2021, 10, 16, 9, 10), datetime.datetime(2021, 10, 23, 9, 10)]
[datetime.datetime(2021, 9, 25, 9, 10), datetime.datetime(2021, 10, 25, 9, 10), datetime.datetime(2021, 11, 25, 9, 10), datetime.datetime(2021, 12, 25, 9, 10), datetime.datetime(2022, 1, 25, 9, 10)]
[datetime.datetime(2021, 9, 25, 9, 10), datetime.datetime(2022, 9, 25, 9, 10), datetime.datetime(2023, 9, 25, 9, 10), datetime.datetime(2024, 9, 25, 9, 10), datetime.datetime(2025, 9, 25, 9, 10)]
说明:
在上面的代码片段中,我们再次导入了所需的模块。然后,我们使用 rrule 子类来收集与 datetime 对象的重复性相关的信息。
dateutil 模块的一个很大的优点是,这个子类可以让程序员处理多个调度任务和日历存储创新。