使用python datetime将上午9点到晚上6点之间的时间划分为3小时的时间间隔

使用python datetime将上午9点到晚上6点之间的时间划分为3小时的时间间隔,python,datetime,Python,Datetime,基本上,我想做的是,将早上9点到晚上6点之间的时间划分为指定的时间间隔 例如,如果我将时间间隔指定为3小时,那么我应该通过将9到6之间的时间除以 ['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00'] 如果我指定时间间隔为2小时,那么我应该 ['2017-05-03 09:00', '2017-05-03 11:00', '2017-05-03 13:00', '2017-05-03 15

基本上,我想做的是,将早上9点到晚上6点之间的时间划分为指定的时间间隔

例如,如果我将时间间隔指定为3小时,那么我应该通过将9到6之间的时间除以

['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00']
如果我指定时间间隔为2小时,那么我应该

['2017-05-03 09:00', '2017-05-03 11:00', '2017-05-03 13:00', '2017-05-03 15:00', '2017-05-03 17:00']
下面是我的代码

from datetime import datetime
from datetime import timedelta
start_time = datetime.now().replace(hour=9, minute=0) #(Morning 9 AM)
end_time = start_time + timedelta(hours=9) # (Evening 6 PM)

result = []
time_interval = 3
while start_time <=end_time:
    result.append(start_time)
    start_time += timedelta(hours=time_interval)

print(result)

或者,您可以解决以下问题:每小时生成指定范围内的日期时间,然后使用指定的
步骤对结果进行迭代:

from datetime import datetime
from datetime import timedelta
from itertools import islice

from dateutil.rrule import HOURLY, rrule

interval = 3
start_time = datetime.now().replace(hour=9, minute=0) #(Morning 9 AM)
end_time = start_time + timedelta(hours=9) # (Evening 6 PM)

stops = islice(rrule(freq=HOURLY, dtstart=start_time, until=end_time), None, None, interval)
print([datetime.strftime(stop, "%Y-%d-%m %H:%M") for stop in stops])
印刷品:

['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00']
['2017-03-05 09:00 to 2017-03-05 12:00', '2017-03-05 12:00 to 2017-03-05 15:00', '2017-03-05 15:00 to 2017-03-05 18:00']
请注意,此处的列表理解和strftime()
调用仅用于演示-
stops
是一个迭代器,它“包含”所需的
日期时间

并且,应用与@NiL使用的相同的
成对
辅助程序,我们可以获得您下一个所需的输出:

from datetime import datetime
from datetime import timedelta
from itertools import islice, tee

from dateutil.rrule import HOURLY, rrule


def pairwise(iterable):
    """s -> (s0,s1), (s1,s2), (s2, s3), ...

    https://docs.python.org/2/library/itertools.html
    """
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


interval = 3
start_time = datetime.now().replace(hour=9, minute=0) #(Morning 9 AM)
end_time = start_time + timedelta(hours=9) # (Evening 6 PM)

stops = islice(rrule(freq=HOURLY, dtstart=start_time, until=end_time), None, None, interval)

print(['{0} to {1}'.format(datetime.strftime(start, "%Y-%d-%m %H:%M"),
                           datetime.strftime(stop, "%Y-%d-%m %H:%M"))
       for start, stop in pairwise(stops)])
印刷品:

['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00']
['2017-03-05 09:00 to 2017-03-05 12:00', '2017-03-05 12:00 to 2017-03-05 15:00', '2017-03-05 15:00 to 2017-03-05 18:00']

或者,您可以解决以下问题:每小时生成指定范围内的日期时间,然后使用指定的
步骤对结果进行迭代:

from datetime import datetime
from datetime import timedelta
from itertools import islice

from dateutil.rrule import HOURLY, rrule

interval = 3
start_time = datetime.now().replace(hour=9, minute=0) #(Morning 9 AM)
end_time = start_time + timedelta(hours=9) # (Evening 6 PM)

stops = islice(rrule(freq=HOURLY, dtstart=start_time, until=end_time), None, None, interval)
print([datetime.strftime(stop, "%Y-%d-%m %H:%M") for stop in stops])
印刷品:

['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00']
['2017-03-05 09:00 to 2017-03-05 12:00', '2017-03-05 12:00 to 2017-03-05 15:00', '2017-03-05 15:00 to 2017-03-05 18:00']
请注意,此处的列表理解和strftime()
调用仅用于演示-
stops
是一个迭代器,它“包含”所需的
日期时间

并且,应用与@NiL使用的相同的
成对
辅助程序,我们可以获得您下一个所需的输出:

from datetime import datetime
from datetime import timedelta
from itertools import islice, tee

from dateutil.rrule import HOURLY, rrule


def pairwise(iterable):
    """s -> (s0,s1), (s1,s2), (s2, s3), ...

    https://docs.python.org/2/library/itertools.html
    """
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


interval = 3
start_time = datetime.now().replace(hour=9, minute=0) #(Morning 9 AM)
end_time = start_time + timedelta(hours=9) # (Evening 6 PM)

stops = islice(rrule(freq=HOURLY, dtstart=start_time, until=end_time), None, None, interval)

print(['{0} to {1}'.format(datetime.strftime(start, "%Y-%d-%m %H:%M"),
                           datetime.strftime(stop, "%Y-%d-%m %H:%M"))
       for start, stop in pairwise(stops)])
印刷品:

['2017-05-03 09:00', '2017-05-03 12:00', '2017-05-03 15:00', '2017-05-03 18:00']
['2017-03-05 09:00 to 2017-03-05 12:00', '2017-03-05 12:00 to 2017-03-05 15:00', '2017-03-05 15:00 to 2017-03-05 18:00']

像这样的东西可能会满足你的需要

from datetime import datetime
from datetime import timedelta
from itertools import tee
start_time = datetime.now().replace(hour=9, minute=0)  # (Morning 9 AM)
end_time = start_time + timedelta(hours=9)  # (Evening 6 PM)

time_interval = 3
delta = 9  # hours


def pairwise(iterable):
    """s -> (s0,s1), (s1,s2), (s2, s3), ...

    https://docs.python.org/2/library/itertools.html
    """
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


iterations = (delta // time_interval) + 1
result = [start_time+i*timedelta(hours=time_interval)
          for i in range(iterations)]
print(result)

formatted=['{} to {}'.format(
    start.strftime('%Y-%m-%d %H:%M'),
    end.strftime('%Y-%m-%d %H:%M'))
    for start, end in pairwise(result)]

from pprint import pprint
pprint(formatted)

像这样的东西可能会满足你的需要

from datetime import datetime
from datetime import timedelta
from itertools import tee
start_time = datetime.now().replace(hour=9, minute=0)  # (Morning 9 AM)
end_time = start_time + timedelta(hours=9)  # (Evening 6 PM)

time_interval = 3
delta = 9  # hours


def pairwise(iterable):
    """s -> (s0,s1), (s1,s2), (s2, s3), ...

    https://docs.python.org/2/library/itertools.html
    """
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


iterations = (delta // time_interval) + 1
result = [start_time+i*timedelta(hours=time_interval)
          for i in range(iterations)]
print(result)

formatted=['{} to {}'.format(
    start.strftime('%Y-%m-%d %H:%M'),
    end.strftime('%Y-%m-%d %H:%M'))
    for start, end in pairwise(result)]

from pprint import pprint
pprint(formatted)

能否将日期转换为秒,然后执行
delta_t_sec=start_time_sec-end_time_sec/N
其中
N
是您的时间间隔。然后,您可以将
delta\u秒
添加到您获得的
N次
日期中。您可以将日期转换为秒,然后执行
delta\u秒=开始时间秒-结束时间秒/N
其中
N
是您的时间间隔。然后,您可以将
delta_t_sec
添加到您获得的日期
N次
,这真的很有帮助,但是否可以以上述格式获得所需的输出<代码>[‘2017-05-03 09:00至2017-05-03 12:00’、‘2017-05-03 12:00至2017-05-03 15:00’、‘2017-05-03 15:00至2017-05-03 18:00’]
谢谢您的帮助,但是否有可能以上述格式获得所需的输出<代码>[‘2017-05-03 09:00至2017-05-03 12:00’、‘2017-05-03 12:00至2017-05-03 15:00’、‘2017-05-03 15:00至2017-05-03 18:00’]