Python: третья пятница месяца

Я программист для новичков-питонов, и мне нужно написать скрипт, чтобы проверить, является ли данная дата (переданная как строка в форме «Месяц, день года») третьей пяткой месяца. Я использую Python 2.7.

Например, эти даты помогут вам лучше понять мою проблему. Годовой календарь.

  • input —> output
  • «18 января 2013» —> Правда
  • '22 февраля 2013' —> Неверно
  • '21 июня 2013 г. —> Правда
  • '20 сентября 2013' —> Правда

Я просто хочу использовать стандартные классы, предоставляемые языком, такие как время, дата и время, календарь и т. Д.

Я просмотрел некоторые ответы, но я вижу вычисления, такие как addidng / subtracting 86400 секунд для каждого дня или даже сравнение в зависимости от количества дней, которые есть в месяце. ИМХО это неправильно, потому что в Python libreries уже заботятся об этих деталях, поэтому нет необходимости изобретать велосипед. Также календари и даты сложны: високосные годы, прыжки секунд, часовые пояса, номера недели и т. Д., Поэтому я думаю, что лучше разрешить библиотекам решать эти сложные детали.

Заранее спасибо за вашу помощь.

    Это должно сделать это:

    from datetime import datetime def is_third_friday(s): d = datetime.strptime(s, '%b %d, %Y') return d.weekday() == 4 and 14 < d.day < 22 

    Контрольная работа:

     print is_third_friday('Jan 18, 2013') # True print is_third_friday('Feb 22, 2013') # False print is_third_friday('Jun 21, 2013') # True print is_third_friday('Sep 20, 2013') # True 

    вы можете использовать что-то вроде этого, чтобы получить третью пятницу месяца (текущий месяц), а затем просто сравните этот третий_страх с вашим днем ​​(по году, месяцу, дню)

     from datetime import datetime, timedelta import calendar now = datetime.now() first_day_of_month = datetime(now.year, now.month, 1) first_friday = first_day_of_month + timedelta(days=((4-calendar.monthrange(now.year,now.month)[0])+7)%7) # 4 is friday of week third_friday = first_friday + timedelta(days=14) 

    Надеюсь это поможет.

    Если вы пытаетесь найти истечение срока действия опции , вы можете использовать что-то вроде этого

     from datetime import datetime import calendar def option_expiration(date): day = 21 - (calendar.weekday(date.year, date.month, 1) + 2) % 7 return datetime(date.year, date.month, day) print option_expiration(datetime.today()) 

    Еще один способ добиться этого … используя целочисленное разделение …

     import datetime def is_date_the_nth_friday_of_month(nth, date=None): #nth is an integer representing the nth weekday of the month #date is a datetime.datetime object, which you can create by doing datetime.datetime(2016,1,11) for January 11th, 2016 if not date: #if date is None, then use today as the date date = datetime.datetime.today() if date.weekday() == 4: #if the weekday of date is Friday, then see if it is the nth Friday if (date.day - 1) // 7 == (nth - 1): #We use integer division to determine the nth Friday #if this integer division == 0, then date is the first Friday, # if the integer division is... # 1 == 2nd Friday # 2 == 3rd Friday # 3 == 4th Friday # 4 == 5th Friday return True return False