簡體   English   中英

根據月份中的周查找日期python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM