Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何在时间戳中迭代数小时_Python_Datetime_For Loop - Fatal编程技术网

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

在python中如何在时间戳中迭代数小时,python,datetime,for-loop,Python,Datetime,For Loop,我试图迭代两个时间戳之间的小时数。例如: 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

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

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

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

您想要的对象是一个“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)
试试这个

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]

您要查找的单词/函数是
enumerate
。谢谢!但不幸的是,这只解决了我问题的第一部分。。。你能找到一种方法来帮助我在小时数为0时该怎么办?如果时间戳之间的时间差小于一小时,该怎么办?这已经得到了解决。。谢谢