[英]find date based on week in month python
给定年,月和周的编号(第一,第二,第三等),是否可以找到特定一周内的日期范围? 我已经看到了很多有关如何根据特定日期查找星期数的答案,但是我正在尝试根据周数查找日期。 因此,例如,给定(2013,9,“ Thursday”,“ 3rd”),它将得出(2013,9,19)的结果。
到目前为止,这是我的代码(仅适用于以“ teen”结尾的日期):
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)
希望对您有所帮助
dada解决方案的一个快速问题是,当我尝试计算每年美国的阵亡将士纪念日的日期(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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.