目录
问题: 在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
,days
或weeks
。在我们的例子中持续时间是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
,days
或weeks
,而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
函数。