使用 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)
>>>
我在一个相关的 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)
>>>