Python中的Dateutil模块

Python中的Dateutil模块

Python dateutil模块简介

每当我们开始使用需要实时数据的脚本时,我们必须使用dateutil模块来在特定时间检索或安排数据,或者使用检索时间戳的输入数据。

在使用默认的datetime模块来处理日期和时间格式的许多脚本并尝试更改检索到的数据时,这可能是一项艰巨的任务。

幸运的是,开发人员创建了dateutil模块以简化生活。

在接下来的教程中,我们将深入了解Python dateutil模块。Python模块是由一些定义和语句组成的文件。我们可以使用这些模块将一个大程序分解成小段,并将它们导入程序以使用它们的函数。dateutil模块是Python编程语言中的预定义模块之一,用于执行与特定日期和时间相关的工作。

所以,让我们开始吧。

了解Python dateutil模块

Python编程语言中有一个名为datetime的核心模块。我们使用此模块从简单到复杂的方法来操作日期和时间。尽管此模块对于特定数量的实例是足够的,但是Python dateutil模块为datetime模块提供了一些强大的扩展功能。

Python dateutil模块的主要特点

Python dateutil模块的主要特点如下:

  1. dateutil模块支持解析任何字符串格式的日期。
  2. 此模块提供了内部最新的世界时区详情。
  3. 此模块有助于计算相对增量。
  4. 此模块还有助于基于相当灵活的重复规则计算日期。

如何在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模块分为几个子类,如下所示:

  1. easter,
  2. parser,
  3. relativedelta,
  4. rrule,
  5. 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 模块的一个很大的优点是,这个子类可以让程序员处理多个调度任务和日历存储创新。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程