使用python datetime将上午9点到晚上6点之间的时间划分为3小时的时间间隔
基本上,我想做的是,将早上9点到晚上6点之间的时间划分为指定的时间间隔 例如,如果我将时间间隔指定为3小时,那么我应该通过将9到6之间的时间除以使用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
['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’]