如何解决使用ISO周频率获取2020年的所有开始日期
我想创建一个日期列表,每个日期代表2020年ISO N周的开始日期。
类似的东西:
weeks2020 = [date(2020,1,1),date(2020,6),13),...]
我使用timedelta(weeks=1)
获得了类似的东西,并将其添加到我的START_DATE
(date(2020,1)
)中,但是获得的日期不正确。
我知道我可以简单地将START_DATE
更改为date(2019,12,30)
,但是我想知道是否存在一种更可靠的方法来得出给定年份中所有星期的开始日期。 / p>
为了清楚起见,这就是我现在正在做的事情:
from datetime import date,timedelta
START_DATE = date(2020,1)
INTERVAL = timedelta(weeks=1)
STEPS = 54
prev_date = START_DATE
for i in range(1,STEPS):
print(prev_date.strftime('%Y-%m-%d')) # step 1: 2020-01-01,step 2: 2020-01-08,...
prev_date += INTERVAL
解决方法
如果您可以使用熊猫,也许这样的事情应该可行-
import pandas as pd
di = pd.to_datetime(pd.date_range(start='2020-1-1',end='2020-12-31',freq='D'))
# check for either monday or start of the month
weekstart = di[(di.weekday == 0) | ((di.day == 1) & (di.weekday != 6)]
输出量
DatetimeIndex(['2020-01-01','2020-01-06','2020-01-13','2020-01-20','2020-01-27','2020-02-01','2020-02-03','2020-02-10','2020-02-17','2020-02-24','2020-03-02','2020-03-09','2020-03-16','2020-03-23','2020-03-30','2020-04-01','2020-04-06','2020-04-13','2020-04-20','2020-04-27','2020-05-01','2020-05-04','2020-05-11','2020-05-18','2020-05-25','2020-06-01','2020-06-08','2020-06-15','2020-06-22','2020-06-29','2020-07-01','2020-07-06','2020-07-13','2020-07-20','2020-07-27','2020-08-01','2020-08-03','2020-08-10','2020-08-17','2020-08-24','2020-08-31','2020-09-01','2020-09-07','2020-09-14','2020-09-21','2020-09-28','2020-10-01','2020-10-05','2020-10-12','2020-10-19','2020-10-26','2020-11-02','2020-11-09','2020-11-16','2020-11-23','2020-11-30','2020-12-01','2020-12-07','2020-12-14','2020-12-21','2020-12-28'],dtype='datetime64[ns]',freq=None)
,
对于第一个时间间隔,请找到开始日期的工作日,并将其从整周中减去。 第一步之后,将时间间隔设置回一周。
START_DATE = date(2020,1,1)
INTERVAL = timedelta(weeks=1) - timedelta(days=START_DATE.weekday())
cur_date = START_DATE
while cur_date.year == START_DATE.year:
print(cur_date.strftime("%Y-%m-%d"))
cur_date += INTERVAL
INTERVAL = timedelta(weeks=1)
,
试图回答自己。
我不知道这是否是最好的解决方案,但是对于我的目标来说似乎很好用
from datetime import date,timedelta
START_DATE = date(2020,1)
INTERVAL = timedelta(days=1)
STEPS = 366
iso_week = 0
weeks_2020 = []
curr_date = START_DATE
for d in range (STEPS):
if not curr_date.isocalendar()[1] == iso_week:
iso_week = curr_date.isocalendar()[1]
weeks_2020.append(curr_date)
curr_date += INTERVAL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。