如何在Python中把时间加到一个日期对象上

220 阅读5分钟

目录

问题: 在Python中给定一个datetime.datetime对象,是否有办法在给定的datetime对象中添加时间?

StackOverflow上的相关问题。

讨论。在 Python中向一个日期时间对象添加时间,应该会产生一个带有最新时间信息的新日期时间对象。例如,如果你把5 hours 添加到一个包含2022-11-05 12:00:00 的日期时间对象中,应该会产生一个带有2022-11-05 17:00:00 的新日期时间对象。

因此,我们将讨论不同的方法,以帮助我们实现上述情况。

方法1:使用timedelta

Python中的日期时间 模块允许你在众多类的帮助下操作日期时间对象,如date,time,timedelta,tzinfo, 等等。因此,我们将使用数据时间模块中的timedelta() 函数来操作/添加时间到给定的数据时间对象。

**方法。**你可以通过两步将时间添加到datetime对象中。

  • 通过调用datetime.timedelta 对象创建一个datetime.timedelta(duration=n).
    • 持续时间可以是milliseconds,microseconds,seconds,minutes,hours,daysweeks 。在我们的例子中持续时间是hours
    • n的值代表指定的时间,在我们的例子中是5。
  • 将timedelta对象添加到datetime对象中,创建一个带有添加时间的新的datetime对象。

代码。

import datetime
original_time = datetime.datetime(2020, 2, 19, 12, 0, 0)
print("Given Datetime: ", original_time)
time_change = datetime.timedelta(hours=5)
new_time = original_time + time_change
print("Changed Datetime: ", new_time)

输出。

Given Datetime:  2020-02-19 12:00:00
Changed Datetime:  2020-02-19 17:00:00

例2: 下面是另一个例子,展示了如何在给定的日期时间对象中增加1天10小时40分钟。

import datetime
import pandas as pd
original_time = datetime.datetime(2020, 2, 19, 12, 0, 0)
print("Given Datetime: ", original_time)
time_change = datetime.timedelta(days=1, hours=10, minutes=40)
new_time = original_time + time_change
print("Changed Datetime: ", new_time)

代码:输出

Given Datetime:  2020-02-19 12:00:00
Changed Datetime:  2020-02-20 22:40:00

方法2:使用Pandas

来自Pandas库的DateOffset 函数允许你为日期时间对象添加特定的时间长度。它一般用于增加或减少一个给定的时间戳。

方法。

  • 调用pandas.DateOffset(duration=n) 函数,其中持续时间可以是milliseconds,microseconds,seconds,minutes,hours,daysweeks ,而n 表示持续时间的长度。
  • 将新创建的DateOffset对象添加到datetime对象中,得到新的时间。

代码。

import datetime
import pandas as pd
original_time = datetime.datetime(2020, 2, 19, 12, 0, 0)
print("Given Datetime: ", original_time)
time_change = pd.DateOffset(hours=5)
new_time = original_time + time_change
print("Changed Datetime: ", new_time)

输出。

Given Datetime:  2020-02-19 12:00:00
Changed Datetime:  2020-02-19 17:00:00

方法3:使用relativedelta

dateutil模块中的relativedelta对象类型被设计成可以应用于现有的日期时间对象,并可以替换该日期时间对象的特定组件。

下面的代码解释了如何使用relativedelta对象为一个给定的日期时间对象添加一个特定的持续时间长度。

代码。

import datetime
from dateutil.relativedelta import relativedelta
original_time = datetime.datetime(2020, 2, 19, 12, 0, 0)
print("Given Datetime: ", original_time)
time_change = relativedelta(hours=5)
new_time = original_time + time_change
print("Changed Datetime: ", new_time)

输出。

Given Datetime:  2020-02-19 12:00:00
Changed Datetime:  2020-02-19 17:00:00

方法4:使用箭头

如果你想计算出当前的日期和时间,然后给当前的日期时间对象添加一个特定的时间间隔,该怎么办?好吧!你肯定可以使用datetime模块来实现这个目的,但是当涉及到修改当前日期时间对象时,Python还为我们提供了一个宏伟的库,即arrow

读者文摘

下面是一个例子,演示了如何在当前日期时间上增加5个小时。

import arrow
time_now = arrow.now()
new_time = time_now.shift(hours=5)
print("Current DateTime: ", time_now)
print("Changed DateTime: ", new_time)

输出。

Current DateTime:  2022-05-11T12:20:46.252611+05:30
Changed DateTime:  2022-05-11T17:20:46.252611+05:30

arrow 模块的shift 方法允许我们将时间向后或向前移动一个特定的时间间隔。

奖励:相关问题

现在我们已经经历了许多在Python中向日期时间对象添加时间的方法,让我们来看看与上述讨论有关的一些常见问题。

如何创建一个等于15分钟前的日期时间? | Python时间抽象

解决方案。

import datetime
print(datetime.datetime.now() - datetime.timedelta(minutes=15))

如何在Python中结合datetime.date和datetime.time对象?

让我们考虑一下,你有两个代表同一事件实例的对象,比如一个对象持有事件的日期,而另一个对象持有时间,你想用这两个对象创建一个日期时间对象。

解决方案。

解决这个问题最简单的方法是在日期和时间对象上使用combine() 方法,将它们合并成一个日期时间对象。

import datetime

dt = datetime.datetime(2022, 10, 5)
tm = datetime.time(12, 00)
date_time = dt.combine(dt, tm)
print(date_time)

输出。

2022-10-05 12:00:00

结论

总结一下,主要有三种方法可以帮助你将时间添加到日期-时间对象上-----。

  • 使用日期时间模块的timedelta() 函数,或
  • 使用dateutil模块的relativedelta 类,或
  • 使用Pandas 库中的DataOffset 函数。