如何在 Python 中计算时差

在Python中,当您需要处理日期和时间时,经常会遇到计算时间间隔的需求。本教程将指导您如何计算两个时间戳之间的小时、分钟和秒的差值。

通过本教程的学习,您将能够:

  • 理解如何运用Python的datetime模块来操控日期和时间;
  • 掌握timedelta对象的概念及其用途;
  • 学会计算任意两个时间戳之间的时间差,并以小时、分钟和秒为单位呈现。

让我们开始这段学习之旅吧。

Python datetime模块的使用方法

在Python中,要处理日期和时间,您需要借助于datetime模块。该模块是Python标准库的一部分,因此您可以直接在您的开发环境中导入,如下所示:

import datetime

为了计算时间差,您需要先创建两个不同的时间戳。您可以选择创建以下类型的对象:

  • 两个日期对象;
  • 两个时间对象;
  • 日期和时间的组合,即日期时间对象。

如何在Python中创建日期对象

首先,从datetime模块导入date类。在Python中,创建日期对象的基本语法是 datetime.date(年, 月, 日)。以下是一个创建名为date1的日期对象的示例:

from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)

# 输出结果: 2022-03-27

您可以尝试在在线Python编译器上运行此代码进行测试。或者,您也可以在本地计算机上安装Python并进行尝试。

如您所见,打印日期时,日期的格式为YYYY-MM-DD。

请注意:月份必须以不带前导零的整数形式指定。在书写日期时,您可能习惯于在月份前添加前导零。

例如,要指定六月份,即一年中的第六个月,请使用6而不是06。

尝试运行以下代码片段,其中月份被指定为03而不是仅3。您将看到它引发了语法错误,如下所示:

date1 = datetime.date(2022,03,27)

print(date1)

# 错误信息
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

接下来,让我们看看如何在Python中创建时间对象。

如何在Python中创建时间对象

要创建时间对象,我们需要导入time类。通过指定小时、分钟、秒和微秒等类属性,我们可以使用time类创建任何Python时间对象。

这些属性都是可选的。如果您不指定某个属性,例如秒,则它将默认为0。

以下代码片段展示了如何创建时间对象time1。与日期对象一样,您可以打印时间对象以查看其格式化的时间。

from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)

# 输出结果: 13:27:45.004600

如何在Python中创建日期时间对象

如您所见,日期对象不包含任何时间信息,而时间对象不包含任何日期信息。

然而,在实际应用中,您常常需要日期和时间信息。因此,建议使用datetime类来处理。

您可以像下面这样访问Python中的datetime类并创建datetime对象:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)

# 输出结果: 2022-03-27 13:27:45.046000

现在,让我们创建另一个没有秒属性的日期时间对象dt2。您会看到,秒被设置为0,这是默认值。

dt2 = datetime.datetime(2022,6,30,14,28)
print(dt2)

# 输出结果: 2022-06-30 14:28:00

到目前为止,您已经学习了如何在Python中创建时间戳——作为日期、时间和日期时间。现在,是时候学习如何计算任意两个时间戳之间的差异了。

请继续阅读下一部分以了解更多。

在Python中使用timedelta对象

在Python中,timedelta表示时间跨度,即两个日期、时间或日期时间对象之间的差异。

当您对两个日期、时间或日期时间对象进行加法或减法操作时,您将得到一个timedelta对象。该对象具有有用的属性和方法,可以帮助您计算时间差。

接下来,让我们计算两个日期时间对象dt1和dt2之间的差异。

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
dt2 = datetime.datetime(2022,6,30,14,28)
tdelta = dt2 - dt1
print(tdelta)
print(type(tdelta))

# 输出结果
95 days, 1:00:14.954000
<class 'datetime.timedelta'>

从上面的代码片段中可以看出,变量tdelta保存了dt1和dt2之间的时间差。并且,使用Python的内置类timedelta,通过 type() 函数验证了tdelta的类型。

现在,让我们来看另一个示例。

如何查找两个日期之间的时差

让我们看一个简单但有趣的例子。

问题:计算当前日期(今天)和您的生日之间的时间差。
为此,将今天设置为第一个时间戳,将您的生日设置为第二个时间戳。

首先,让我们创建两个日期时间对象:

  • 一个表示今天的,我们称之为today;
  • 另一个表示您的生日,我们称之为bday。

datetime类具有now()方法,可以为您提供当前的本地日期和时间。因此,让我们使用它来获取今天这个参考日期。

today = datetime.datetime.now()
print(today)

# 示例输出: 2022-01-22 09:10:18.489538

在下面的代码中,请将bday替换为您的生日,以计算今年生日的剩余时间。

如果您在过完生日后阅读此内容,可以随意将bday设置为您的下一个生日。

bday = datetime.datetime(2022,8,30,11,59)
print(bday)

# 示例输出: 2022-08-30 11:59:00

下一步是计算time_diff,它是一个timedelta对象,如前所述。只需从您的生日中减去今天,您就会得到时间差。

time_diff = bday - today
print(f"您的生日还有 {time_diff}")

# 输出结果
您的生日还有 220 days, 2:46:00.127416

要获取剩余天数,请使用time_diff对象的days属性,如下所示:

tdays = time_diff.days
print(f"您的生日还有 {tdays} 天。")

# 输出结果
您的生日还有 220 天。

如何查找以秒为单位的时差

现在,让我们计算距离您的生日还有多少秒。

要以秒为单位计算总时间差,请对timedelta对象time_diff使用total_seconds()方法。

tsecs = time_diff.total_seconds()
print(f"您的生日还有 {tsecs} 秒。")

# 输出结果
您的生日还有 19017960.127416 秒。

嗯,等待的时间确实很长!

也就是说,您现在知道如何计算任意两个时间戳之间的时间差,并以秒为单位呈现。

现在,让我们回顾一些基础知识并总结以下内容:一天由24小时组成,一个小时是60分钟,一分钟是60秒。

以下图表总结了这些关系:

小时、分钟和秒

因此,要将秒转换为分钟、小时和天,可以使用下表,并除以相应的转换因子。

接下来,让我们将以秒为单位的时间差转换为分钟和小时。

如何查找以分钟为单位的时差

要获得以分钟为单位的时间差,只需将总秒数除以60。

让我们将tsecs除以60,并将结果存储在一个名为tmins的变量中,如下所示:

tmins = tsecs/60
print(f"您的生日还有 {tmins} 分钟。")

# 输出结果
您的生日还有 316966.0021236 分钟。

如何查找以小时为单位的时差

既然您已经计算了以分钟为单位的时间差,您可以将其除以60,以得到以小时为单位的时间差。或者,您可以将总秒数除以60*60=3600。

thrs = tsecs/(60*60)
print(f"您的生日还有 {thrs} 小时。")

# 输出结果
您的生日还有 5282.76670206 小时。

因此,您现在已经掌握了如何以您选择的任何单位计算时间差。

总结

在本教程中,您学习了如何:

  • 使用Python的datetime模块创建和处理日期和时间;
  • 使用timedelta对象获取时间跨度或时间差;
  • 计算以秒、分钟和小时为单位的时间差。

希望本教程对您有所帮助。既然您已经了解了如何在Python中计算时间差,那么是时候将您的技能付诸实践了。

祝您学习愉快,编程快乐!

您还可以了解如何在Python中编写等于或不等于代码,或者制作蛇游戏。