在Python中列出两个日期之间的小时数清单

5
我有两个时间点,希望使用Python相同的格式列出它们之间所有小时的列表。
from= '2016-12-02T11:00:00.000Z'
to= '2017-06-06T07:00:00.000Z'
hours=to-from

所以结果会像这样: 2016-12-02T11:00:00.000Z 2016-12-02T12:00:00.000Z 2016-12-02T13:00:00.000Z ......以此类推。 我该如何做,需要使用哪种插件?

1
from datetime import timedelta。这应该会有所帮助。 - cs95
3
"from" 是一个内置词。 - hurturk
你不能从 str 对象中减去,应该使用 datetime 对象。 - Azat Ibrakov
返回的范围是否应包括“to”? - Azat Ibrakov
如果分钟/秒等不为零,我们应该截断它们吗? - Azat Ibrakov
2个回答

12

如果可能的话,我会建议使用pandas。

import pandas
time_range = pandas.date_range('2016-12-02T11:00:00.000Z', '2017-06-06T07:00:00.000Z', freq='H')

如果您需要字符串,请使用以下内容:

timestamps = [str(x) + 'Z' for x in time_range]
# Output
# ['2016-12-02 11:00:00+00:00Z',
#  '2016-12-02 12:00:00+00:00Z',
#  '2016-12-02 13:00:00+00:00Z',
#  '2016-12-02 14:00:00+00:00Z',
#  '2016-12-02 15:00:00+00:00Z',
#  '2016-12-02 16:00:00+00:00Z',
#  ...]

听起来很有趣且容易!但是我该如何下载它呢? - M.Alsioufi
1
根据您使用的平台和Python版本,pip install pandas 应该可以解决问题。 - aquil.abdullah
我已经下载并且它可以工作!但是当我打印time_range时,它似乎不是一个常规列表,我该如何将其转换为列表?! - M.Alsioufi
你看到我的编辑了吗?列表推导式 timestamps = [str(x) + 'Z' for x in time_range] 应该会给你一个符合你要求格式的字符串列表。 - aquil.abdullah

9

使用标准库的datetime包,可以提供更简单的解决方案:

from datetime import datetime, timedelta

DATE_TIME_STRING_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'

from_date_time = datetime.strptime('2016-12-02T11:00:00.000Z',
                                   DATE_TIME_STRING_FORMAT)
to_date_time = datetime.strptime('2017-06-06T07:00:00.000Z',
                                 DATE_TIME_STRING_FORMAT)

date_times = [from_date_time.strftime(DATE_TIME_STRING_FORMAT)]
date_time = from_date_time
while date_time < to_date_time:
    date_time += timedelta(hours=1)
    date_times.append(date_time.strftime(DATE_TIME_STRING_FORMAT))

将为我们提供

>>>date_times
['2016-12-02T11:00:00.000000Z', 
 '2016-12-02T12:00:00.000000Z',
 '2016-12-02T13:00:00.000000Z', 
 '2016-12-02T14:00:00.000000Z',
 '2016-12-02T15:00:00.000000Z', 
 '2016-12-02T16:00:00.000000Z',
 '2016-12-02T17:00:00.000000Z', 
 '2016-12-02T18:00:00.000000Z',
 '2016-12-02T19:00:00.000000Z', 
 '2016-12-02T20:00:00.000000Z',
 ...]

如何在Java中实现相同的功能? - Abhilash
@Abhilash:你可以提出一个不同的问题或查看这个线程 - Azat Ibrakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接