如何在 for 循环(日期时间)中步进一周(7 天)
How to step one week (7 days) in a for loop (datetime)
我有一个这样的 for 循环:
for mydate in daterange (startDate, endDate):
这每天都在增加。我希望这个步骤是一周。
一个 hack 将跳过 6 天,但这太糟糕了。
如何做到这一点?
def daterange(start_date, end_date):
for n in range(int ((end_date - start_date).days)):
yield start_date + timedelta(n)
您使用步长为 7 的范围对象并将其添加到开始日期:
import datetime
def daterange(startdate, enddate, steps=1):
"""Yields dates in increments of steps days from startdate to enddate"""
numdays = (enddate-startdate).days
for x in range (0, numdays, steps):
yield startdate + datetime.timedelta(days = x)
today = datetime.datetime.today()
end = today + datetime.timedelta(days=40)
print( list(daterange(today, end, 7)))
输出:
[datetime.datetime(2018, 9, 28, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 5, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 12, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 19, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 26, 19, 34, 26, 976681),
datetime.datetime(2018, 11, 2, 19, 34, 26, 976681)]
只需将步长添加到循环中:
from datetime import timedelta, date
def daterange(start_date, end_date):
for n in range(0, int((end_date - start_date).days) + 1, 7):
yield start_date + timedelta(n)
start_dt = date(2018, 9, 1)
end_dt = date(2018, 10, 30)
for dt in daterange(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))
输出:
2018-09-01
2018-09-08
2018-09-15
2018-09-22
2018-09-29
2018-10-06
2018-10-13
2018-10-20
2018-10-27
我有一个这样的 for 循环:
for mydate in daterange (startDate, endDate):
这每天都在增加。我希望这个步骤是一周。 一个 hack 将跳过 6 天,但这太糟糕了。 如何做到这一点?
def daterange(start_date, end_date):
for n in range(int ((end_date - start_date).days)):
yield start_date + timedelta(n)
您使用步长为 7 的范围对象并将其添加到开始日期:
import datetime
def daterange(startdate, enddate, steps=1):
"""Yields dates in increments of steps days from startdate to enddate"""
numdays = (enddate-startdate).days
for x in range (0, numdays, steps):
yield startdate + datetime.timedelta(days = x)
today = datetime.datetime.today()
end = today + datetime.timedelta(days=40)
print( list(daterange(today, end, 7)))
输出:
[datetime.datetime(2018, 9, 28, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 5, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 12, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 19, 19, 34, 26, 976681),
datetime.datetime(2018, 10, 26, 19, 34, 26, 976681),
datetime.datetime(2018, 11, 2, 19, 34, 26, 976681)]
只需将步长添加到循环中:
from datetime import timedelta, date
def daterange(start_date, end_date):
for n in range(0, int((end_date - start_date).days) + 1, 7):
yield start_date + timedelta(n)
start_dt = date(2018, 9, 1)
end_dt = date(2018, 10, 30)
for dt in daterange(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))
输出:
2018-09-01
2018-09-08
2018-09-15
2018-09-22
2018-09-29
2018-10-06
2018-10-13
2018-10-20
2018-10-27