在python中如何在时间戳中迭代数小时

2024-05-04 00:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图迭代两个时间戳之间的小时数。例如:

a = 2018-01-19 12:35:00 
b = 2018-01-19 18:50:00

for hour in range(a.hour, b.hour +1):
    print(hour)

这将在:12, 13, 14, 15, 16, 17, 18

稍后我想使用'hour'变量,所以我需要它来计算有多少小时的差异,而不是小时本身

我想要的结果是:0, 1, 2, 3, 4, 5, 6

在获取这样的时间戳时还有另一个问题:

c = 2018-01-16 17:59:00 
d = 2018-01-17 00:14:00

因为:00:14:00中的小时是0

在这种情况下,我想得到:0, 1, 2, 3, 4, 5, 6, 7

我不知道怎么做。。有人能帮忙吗


Tags: infor时间情况range差异print小时
2条回答

试试这个

from datetime import datetime

def date_range(x, y):
    fmt = '%Y-%m-%d %H:%M:%S'
    x, y = datetime.strptime(x, fmt), datetime.strptime(y, fmt)
    duration = y.replace(minute=59) - x.replace(minute=0)
    days, seconds = duration.days, duration.seconds
    hours = days * 24 + seconds // 3600
    return list(range(hours + 1))

a = '2018-01-19 12:35:00' 
b = '2018-01-19 18:50:00'
c = '2018-01-16 17:59:00'
d = '2018-01-17 00:14:00'

print(date_range(a, b))
print(date_range(c, d))

输出:

[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]

您想要的对象是“timedelta”对象-它表示两个时间戳之间的持续时间。假设你想从一个日期对象开始,然后每隔一小时做一件事。不要试图自己找出间隔逻辑,使用内置的东西

>>> a = datetime.now()
>>> a
datetime.datetime(2020, 8, 17, 6, 33, 25, 529995)
>>> a + timedelta(hours=1)
datetime.datetime(2020, 8, 17, 7, 33, 25, 529995)
>>> a + timedelta(hours=1)
datetime.datetime(2020, 8, 17, 7, 33, 25, 529995)
>>> a + timedelta(hours=2)
datetime.datetime(2020, 8, 17, 8, 33, 25, 529995)

相关问题 更多 >