首页 > 解决方案 > 使用Python的开始和结束日期和时间的url格式

问题描述

我正在使用 Pandas 生成指定范围内的日期和时间列表以查询 API。我的目标是按小时查询数周或数月。

time_range = pd.date_range('20180601T07:00:0000', '20180701T07:00:0000', freq='H')
time_range = time_range.strftime("%Y%m%d"+'T%H:00-0000')

生成所需列表格式的时间列表。我遇到困难的地方是 URL 的格式...

startdatetime=20180601T07:00-0000&enddatetime=20180601T08:00-0000

我知道我需要从 Pandas 列表中的值 0 和 1 开始,但我不知道如何循环。我应该考虑像...这样的字典吗?

{date1:[hour1, hour2, etc...], date2:[hour1, hour2, etc...], ...}

并使用 .format where startdatetime={1}&enddatetime={2} ?还是应该更像一个for循环...

for date in date_range:
    url = 'http://somename?startdatetime={date}&enddatetime{date2}'
    urldate = url.format(date=date)
    urldate2 = url.format(date2=date + 1)

任何帮助表示赞赏!

标签: pythonpython-3.xdatetimeurldate-formatting

解决方案


如果我清楚地理解,您想以一小时的步长从开始日期/时间 (2018-06-01 07:00) 迭代到结束日期/时间 (2018-07-01 07:00)。并生成一个日期/时间间隔为一小时的 URL。

当您可以使用标准库执行此操作时,我不知道您为什么要使用 Panda,如下所示:

import datetime

start = datetime.datetime(2018, 6, 1, 7)
end = datetime.datetime(2018, 7, 1, 7)
delta = datetime.timedelta(hours=1)

fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'

while start < end:
    date1 = start
    date2 = start + delta
    url = fmt.format(date1=date1, date2=date2)
    print(url)
    start = date2

你得到:

http://somename?startdatetime=2018060107:00-0000&enddatetime2018060108:00-0000
http://somename?startdatetime=2018060108:00-0000&enddatetime2018060109:00-0000
http://somename?startdatetime=2018060109:00-0000&enddatetime2018060110:00-0000
http://somename?startdatetime=2018060110:00-0000&enddatetime2018060111:00-0000
...

在循环中,我使用日期实例。我使用格式字符串,如“{date2:%Y%m%d%H:00-0000}”以所需格式格式化日期和时间。

请注意,使用标准库很容易实现date_range()函数:

def date_range(start, end, delta):
    while start < end:
        yield start
        start = start + delta

要获取间隔为一小时的日期列表,您可以执行以下操作:

dates = list(date_range(
    datetime.datetime(2018, 6, 1, 7),
    datetime.datetime(2018, 7, 1, 7),
    datetime.timedelta(hours=1)))

那么,解决方案就变成了:

fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'

for date1, date2 in zip(dates[:-1], dates[1:]):
    url = fmt.format(date1=date1, date2=date2)
    print(url)

诀窍是使用zip()函数将日期列表移动一个项目来获取一对日期。


推荐阅读