gpt4 book ai didi

Python - 遍历月份日期并打印自定义输出

转载 作者:行者123 更新时间:2023-12-04 09:45:00 27 4
gpt4 key购买 nike

我目前不确定用于以下问题的逻辑以及编程新手。(目前正在学习 python)

尝试遍历给定月份的每个日期 - 比如说 05/01 -- 05/31 并以下面的格式打印出来。

enter image description here

周一至周五的日期将单独打印。
周六和周日的日期将分别打印。

如果月份从星期五开始 - 05/01/2020,输出应该像
enter image description here
因为,它是那一周的最后一个工作日。

对于 2020 年 4 月,产量将如下所示,因为 4 月的第一周从周三开始。

enter image description here

我设法提出了以下尝试,但不确定如何进一步进行。

import sys
from datetime import date, datetime, timedelta

year = int(sys.argv[1])
month = int(sys.argv[2])
st_dt = int(sys.argv[3])
en_dt = int(sys.argv[4])

first_date = datetime(year, month, st_dt).date()
get_first_day = datetime(year, month, st_dt).isoweekday()

def daterange(startDate, endDate, delta=timedelta(days=1)):
currentDate = startDate
while currentDate <= endDate:
yield currentDate
currentDate += delta

for date in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):
print(date)


date.py 2020 5 1 31 # script

想出了一个独立的“if 循环”,正如我之前所说,不知道如何构建更大的图 :(
if get_first_day == 1:
#print("Monday")
sec_d = first_date + timedelta(days=4)
elif get_first_day == 2:
sec_d = first_date + timedelta(days=3)
elif get_first_day == 3:
sec_d = first_date + timedelta(days=2)
elif get_first_day == 4:
sec_d = first_date + timedelta(days=2)
elif get_first_day == 5:
sec_d = first_date
#print("Friday")
else:
pass

print(f"Second date:{sec_d} ") -- which gave -- > Second date:2020-05-01

最佳答案

您可以将日期保存在字典中,字典键是日历周元组和日期类型(周末、星期几)。

每一天都保存在 allDays字典,按周数和日期类型的组合分组为键:

 ('18', 'weekend'): [datetime.date(2020, 5, 2), datetime.date(2020, 5, 3)],
('18', 'working'): [datetime.date(2020, 5, 1)],
('19', 'weekend'): [datetime.date(2020, 5, 9), datetime.date(2020, 5, 10)],
('19', 'working'): [datetime.date(2020, 5, 4), ...

所以你只需要取出每个 dict 项目的第一个和最后一个项目:
import sys
from datetime import date, datetime, timedelta

year, month, st_dt, en_dt = 2020, 5, 1, 31

first_date = datetime(year, month, st_dt).date()
get_first_day = datetime(year, month, st_dt).isoweekday()

def daterange(startDate, endDate, delta=timedelta(days=1)):
currentDate = startDate
while currentDate <= endDate:
yield currentDate
currentDate += delta

allDays = {}
_lastDayType = None
for dte in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):
if 0 <= dte.weekday() < 5:
_dayType = 'working'
else:
_dayType = 'weekend'

_weeknum = dte.strftime("%V") # number of calendar week
_key = (_weeknum, _dayType)
if _key not in allDays: # create an empty list if unique key doesnt exist
allDays[_key] = []
allDays[_key].append(dte) # add the dates ...

for k,v in allDays.items():
if len(v) == 1:
first, last = v[0], v[0]
else:
first, last = v[0], v[-1]
print("%s >> %s" % (first, last))

输出:
2020-05-01 >> 2020-05-01
2020-05-02 >> 2020-05-03
2020-05-04 >> 2020-05-08
2020-05-09 >> 2020-05-10
2020-05-11 >> 2020-05-15
2020-05-16 >> 2020-05-17
2020-05-18 >> 2020-05-22
2020-05-23 >> 2020-05-24
2020-05-25 >> 2020-05-29
2020-05-30 >> 2020-05-31

关于Python - 遍历月份日期并打印自定义输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62170155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com