根据python的月份查找日期
问题描述:
在给定年份,月份和星期编号(第1,第2,第3等)的情况下,有没有办法查找特定周内的日期范围?我已经看到很多关于如何查找基于特定日期的星期数的答案,但我正在尝试根据星期数找到日期。举例来说,(2013,9,“星期四”,“第3”)给出了结果(2013,9,19)。根据python的月份查找日期
这里是我到目前为止的代码(仅适用于在“teenth”结束日期):
from datetime import date
def meetupday(year, month, weekday, word):
weekday_dic = {"Monday": 0, "Tuesday": 1, "Wednesday": 2, "Thursday": 3,
"Friday": 4, "Saturday": 5, "Sunday": 6}
week_of_the_month = {"1st": 1, "2nd": 2, "3rd": 3, "4th": 4, "last": 5}
if word == "teenth":
for day in xrange(13, 20):
if weekday_dic[weekday] == date(year, month, day).weekday():
return year, month, day
else:
for date in xrange(1, amount_of_days+1):
date_data = datetime.date(year, month, date).isocalendar()
if date_data[2] == weekday_dic[weekday]+1:
return year, month, week_of_the_month[word]
这是exercism.io的聚会问题。
答
我的解决方案基于您给定的数据的日期将是类似的东西
from datetime import datetime, timedelta
weekday_dic = {"Monday": 0, "Tuesday": 1, "Wednesday": 2, "Thursday": 3,
"Friday": 4, "Saturday": 5, "Sunday": 6}
week_of_the_month = {"1st": 1, "2nd": 2, "3rd": 3, "4th": 4, "last": 5}
start_first_week = first_sunday = datetime(year, month, 1)
while start_first_week.weekday() != weekday_dic[weekday]:
start_first_week += timedelta(days=1)
start_first_week += timedelta(days=(week_of_the_month[word] - 1) * 7)
我希望帮助你一点
答
一个快速的问题,我发现了达达主义的解决方案是,当我试图计算每年美国阵亡将士纪念日的日期(5月的最后一个星期一)。我会得到2018-06-04。根据我的参数,这不是正确的月份。如果输出月份与输入不匹配,我添加了一个快速修复,只需要减去7天。我不确定底层问题是什么。现在返回正确答案:2018-05-28。
from datetime import datetime, timedelta
weekday_dic = {"Monday": 0, "Tuesday": 1, "Wednesday": 2, "Thursday": 3,
"Friday": 4, "Saturday": 5, "Sunday": 6}
week_of_the_month = {"1st": 1, "2nd": 2, "3rd": 3, "4th": 4, "last": 5}
start_first_week = first_sunday = datetime(year, month, 1)
while start_first_week.weekday() != weekday_dic[weekday]:
start_first_week += timedelta(days=1)
start_first_week += timedelta(days=(week_of_the_month[word] - 1) * 7)
if start_first_week.month != month:
start_first_week += datetime.delta(days=-7)
哇,与我的相比,这太神奇了!非常感谢! – Drivebyluna 2014-11-23 04:03:35