【问题标题】:url formatting with beginning & ending date & time using Python使用Python的开始和结束日期和时间的url格式
【发布时间】:2018-07-09 20:10:01
【问题描述】:

我正在使用 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)

感谢任何帮助!

【问题讨论】:

    标签: python python-3.x datetime url date-formatting


    【解决方案1】:

    如果我理解清楚,您想以一小时的步长从开始日期/时间 (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() 函数将日期列表移动一个项目来获取一对日期。

    【讨论】:

    • 谢谢 - 这正是我需要的,我想我需要了解 timedelta
    • 使用 zip 版本与 timedelta 版本相比有什么好处>
    • 两者都使用timedelta。第一个使用while循环,第二个使用for循环。第一是效率,第二是可读性。由您决定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多