Python 日期比较:综合教程

导航至

这篇文章由 Juan Reyes 撰写。向下滚动查看作者简介。

Python 是一种通用的编程语言,广泛用于各种任务,包括操作和比较日期。本综合教程将指导您完成 Python 中比较日期的不同技术。我们将涵盖的主题包括

  • 将日期与今天进行比较

  • 比较两个不带时间的日期

  • 比较 DateTime 字符串

  • 比较 DateTime 差异

  • 比较时间戳

  • 将日期字符串转换为 Python 日期对象。

将日期与今天进行比较

在许多应用程序中,将给定日期与今天的日期进行比较至关重要。为此,您可以使用 Python 中的 DateTime 模块。此模块提供了 DateTime 类,它表示时间中的单个点。

date 类是 DateTime 类的子类,仅处理日期,不处理时间。

以下是如何将日期与今天进行比较的方法

from datetime import date

# Create a sample date
sample_date = date(2023, 3, 20)

# Get today's date
today = date.today()

# Compare dates
if sample_date < today:
    print("The sample date is in the past.")
elif sample_date > today:
    print("The sample date is in the future.")
else:
    print("The sample date is today.")

让我们分解一下我们所做的。

导入 date 类

我们首先从 DateTime 模块导入 date 类。date 类允许我们处理日期(年、月和日),而无需考虑时间信息(小时、分钟和秒)。

from datetime import date

创建一个示例日期

我们通过实例化 date 类并传递年、月和日作为参数来创建一个名为 sample_date 的示例日期对象。

sample_date = date(2023, 3, 20)

获取今天的日期

我们使用 date 类的 today() 方法来获取当前日期。该方法返回一个 date 对象,该对象表示根据系统本地时间的当前日期(年、月和日)。

today = date.today()

比较日期

我们使用标准比较运算符(<、>、==)将 sample_date 与今天进行比较。然后,根据比较结果,我们打印 sample_date 是过去、未来还是当前日期。

if sample_date < today: 
    print("The sample date is in the past.") 
elif sample_date > today: 
    print("The sample date is in the future.") 
else:
    print("The sample date is today.")

在这里,我们向您展示了如何在 Python 中使用 date 类将给定日期与今天的日期进行比较。通过了解如何比较日期,您可以处理各种需要确定 Python 应用程序中日期与当前日期之间关系的场景。

比较两个不带时间的日期

您可以使用 date 类来比较两个不考虑时间的日期。以下示例演示了这一点

from datetime import datetime
# Create two datetime objects with time
datetime1 = datetime(2023, 3, 20, 12, 0, 0)
datetime2 = datetime(2023, 3, 21, 18, 30, 0)
# Extract dates from datetime objects
date1 = datetime1.date()
date2 = datetime2.date()
# Compare dates
if date1 < date2:
    print("Date1 is earlier than Date2.")
elif date1 > date2:
    print("Date1 is later than Date2.")
else:
    print("Date1 and Date2 are the same.")

在本节中,代码从 DateTime 对象中提取日期部分,并使用标准比较运算符对其进行比较。使用 DateTime 类,我们演示了如何在 Python 中比较两个不考虑其时间信息的日期。当仅基于日期部分比较 DateTime 对象,而忽略时间分量时,此方法非常有用。

比较 DateTime 字符串

有时,您可能需要比较 datetime 字符串而不是 DateTime 或 date 对象。为此,您可以使用 DateTime 类中的 strptime 函数将字符串转换为 DateTime 对象。

这是一个例子

from datetime import datetime

# Two datetime strings
datetime_str1 = "2023-03-20 12:00:00"
datetime_str2 = "2023-03-21 18:30:00"

# Define the format of the datetime strings
datetime_format = "%Y-%m-%d %H:%M:%S"

# Convert the strings to datetime objects
datetime1 = datetime.strptime(datetime_str1, datetime_format)
datetime2 = datetime.strptime(datetime_str2, datetime_format)

# Compare datetime objects
if datetime1 < datetime2:
    print("Datetime1 is earlier than Datetime2.")
elif datetime1 > datetime2:
    print("Datetime1 is later than Datetime2.")
else:
    print("Datetime1 and Datetime2 are the same.")

strptime 函数需要一个格式字符串,该字符串描述输入 DateTime 字符串的结构。在此示例中,格式字符串为“%Y-%m-%d %H:%M:%S”,对应于 YYYY-MM-DD HH:MM:SS 模式。然后,我们定义一个格式字符串 datetime_format,该字符串对应于我们的 datetime 字符串的结构。在本例中,格式为“%Y-%m-%d %H:%M:%S”。最后,我们使用 DateTime 类中的 strptime 函数将 DateTime 字符串转换为 datetime 对象。strptime 函数接受两个参数:datetime 字符串和格式字符串。生成的 DateTime 对象存储在 datetime1 和 datetime2 中。

现在,我们已经向您展示了如何通过使用 DateTime.strptime() 函数将 DateTime 字符串转换为 DateTime 对象,从而在 Python 中比较 DateTime 字符串,您将能够处理文本格式的 DateTime 数据并根据需要执行比较。

比较 DateTime 差异

当计算两个日期或时间之间的持续时间时,比较两个 DateTime 对象之间的差异非常有用。DateTime 模块提供了 TimeDelta 类来表示持续时间。

以下是如何比较 DateTime 差异的方法

from datetime import datetime, timedelta

# Create two datetime objects
datetime1 = datetime(2023, 3, 20, 12, 0, 0)
datetime2 = datetime(2023, 3, 21, 18, 30, 0)

# Calculate the difference between the two datetimes
difference = datetime2 - datetime1

# Create a timedelta object representing 24 hours
one_day = timedelta(days=1)

# Compare the difference to one day
if difference < one_day:
    print("The difference is less than one day.")
elif difference > one_day:
    print("The difference is more than one day.")
else:
    print("The difference is exactly one day.")

在此示例中,我们演示了如何使用 Python 的 datetime 和 TimeDelta 类计算和比较两个 DateTime 对象之间的时间差。此方法使您可以确定时间中两个点之间的持续时间,并比较不同时间间隔的长度。

让我们剖析一下这些差异。

首先,我们从 DateTime 模块导入 DateTime 和 TimeDelta 类。DateTime 类允许我们组合日期和时间信息,而 TimeDelta 类表示两个日期或时间之间的持续时间。然后,我们创建要比较的两个 DateTime 对象,并从 datetime2 中减去 datetime1 以计算它们的时间差。结果是一个 TimeDelta 对象,我们将其存储在 time_difference 变量中。接下来,我们创建一个 TimeDelta 对象,该对象表示预定义的持续时间,在本例中为一天。我们将使用此持续时间来与计算出的时间差进行比较。

最后,我们使用标准比较运算符(<、>、==)将 time_difference 与 one_day 持续时间进行比较。根据比较结果,我们打印时间差是否小于、大于或正好是一天。

比较时间戳

时间戳是将时间点表示为单个数字的另一种方式。例如,您可以使用 Python 中的 timestamp 方法将 DateTime 对象转换为时间戳。

要比较时间戳,您可以按照以下步骤操作

from datetime import datetime

# Create two datetime objects
datetime1 = datetime(2023, 3, 20, 12, 0, 0)
datetime2 = datetime(2023, 3, 21, 18, 30, 0)

# Convert datetime objects to timestamps
timestamp1 = datetime1.timestamp()
timestamp2 = datetime2.timestamp()

# Compare timestamps
if timestamp1 < timestamp2:
    print("Timestamp1 is earlier than Timestamp2.")
elif timestamp1 > timestamp2:
    print("Timestamp1 is later than Timestamp2.")
else:
    print("Timestamp1 and Timestamp2 are the same.")

此代码将 datetime 对象转换为时间戳,并使用标准比较运算符对其进行比较。

从字符串创建 Python 日期

当处理文本格式的日期时,您可能需要将它们转换为 Python date 或 datetime 对象以进行进一步处理。您可以为此目的使用 strptime 函数。

以下是将日期字符串转换为 Python 日期对象的示例

from datetime import datetime

# A date string
date_str = "2023-03-20"

# Define the format of the date string
date_format = "%Y-%m-%d"

# Convert the string to a date object
date_obj = datetime.strptime(date_str, date_format).date()

# Print the date object
print("Date object:", date_obj)

在此示例中,格式字符串“%Y-%m-%d”对应于 YYYY-MM-DD 模式。因此,首先,使用 strptime 函数将日期字符串转换为 DateTime 对象。strptime 函数接受两个参数:日期字符串和格式字符串。然后,我们调用 DateTime 对象上的 date() 方法来提取日期部分并将其存储在 date_obj 变量中。最后,date() 方法提取日期部分。

当处理文本格式的日期数据(例如从外部来源或用户输入获得的数据)时,此方法非常实用。

结论

在本教程中,我们介绍了在 Python 中比较日期的各种技术,包括将日期与今天进行比较、比较两个不带时间的日期、比较 datetime 字符串、比较 DateTime 差异、比较时间戳以及将日期字符串转换为 Python 日期对象。了解这些技术使您可以有效地操作和比较 Python 项目中的日期。

要了解有关 InfluxData Python 支持的信息,请单击此处

关于作者

这篇文章由 Juan Reyes 撰写。Juan 是一位工程师,内心深处是一位梦想家,他远渡重洋来到日本,追寻机遇和挑战的承诺。在东方努力寻找自我并建立有意义的生活的同时,Juan 从他作为企业家、艺术家、奋斗者、父亲形象、丈夫和朋友的经历中汲取智慧,开始撰写关于激情、意义、自我发展、领导力、人际关系和心理健康的文章。他多年的奋斗和自我发现启发了他,并驱使他踏上智慧之旅。