使用 datetime.timedelta(hours=1) 添加小时数

Add hours with datetime.timedelta(hours=1)

我在一个相关的 post 中看到你不能用 .timedelta 添加少于 24 小时,但我真的需要增加一个小时,我的代码是这样的:

Hour =df['Hour'].values[0]
16:42:00
The column Hour is a datetime.time

我正在尝试像这样增加一小时:

from datetime import date
HourPlus=datetime.datetime.combine(date.today() +datetime.timedelta(hours=1),Hour)

但只有当我添加天数=1 而不是小时数时才有效,我该如何解决这个问题?

from datetime import date
HourPlus=datetime.datetime.combine(date.today() +datetime.timedelta(days=1),Hour)
2021-04-14 16:42:00

使用 datetime.now() 而不是 date.today() 保留时间分量。

import datetime as dt

nw = dt.datetime.now()
print(nw)
print(nw + dt.timedelta(hours=1))

pandas Timedelta() 有效

df = pd.DataFrame(pd.date_range("1-apr-2021", freq="H", periods=12), columns=["hour"])

df.assign(plus1=df["hour"] + pd.Timedelta(hours=1))

输出

                  hour               plus1
0  2021-04-01 00:00:00 2021-04-01 01:00:00
1  2021-04-01 01:00:00 2021-04-01 02:00:00
2  2021-04-01 02:00:00 2021-04-01 03:00:00
3  2021-04-01 03:00:00 2021-04-01 04:00:00
4  2021-04-01 04:00:00 2021-04-01 05:00:00
5  2021-04-01 05:00:00 2021-04-01 06:00:00
6  2021-04-01 06:00:00 2021-04-01 07:00:00
7  2021-04-01 07:00:00 2021-04-01 08:00:00
8  2021-04-01 08:00:00 2021-04-01 09:00:00
9  2021-04-01 09:00:00 2021-04-01 10:00:00
10 2021-04-01 10:00:00 2021-04-01 11:00:00
11 2021-04-01 11:00:00 2021-04-01 12:00:00

我解决了这个问题,出于某种原因 datetime.timedelta(hours=1) 必须像这样在“(”之外:

a = datetime.datetime.combine(date.today(),Hour)
b = a + datetime.timedelta(hours=1)

而不是这样

b=datetime.datetime.combine(date.today() +datetime.timedelta(hours=1),Hour)

问题的核心在于

date.today() +datetime.timedelta(hours=1)

无法添加一个小时,因为 datetime.date 是日期而不是日期时间。因此,在日期前加一个小时不会更改日期。

您需要有一个 datetime.date时间对象才能有意义地增加一个小时。

>>> import datetime 
>>> x = datetime.date.today()
>>> x
datetime.date(2021, 4, 13)
>>> x + datetime.timedelta(hours=1)
datetime.date(2021, 4, 13)
>>> y = datetime.datetime.today()
>>> y
datetime.datetime(2021, 4, 13, 14, 32, 41, 989496)
>>> y + datetime.timedelta(hours=1)
datetime.datetime(2021, 4, 13, 15, 32, 41, 989496)
>>>