Второй последний вторник каждого месяца - PullRequest
0 голосов
/ 10 апреля 2020

Как получить дату второго последнего вторника месяца?

import calendar
todayyear= date.datetime.today().year
todayday = date.datetime.today().day
c = calendar.TextCalendar(calendar.SUNDAY)
str = c.formatmonth(todayyear,todayday)
print(str)

    October 2020
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Мне нужно распечатать дату второго последнего вторника этого месяца, которая является 20-й в данном конкретном случае, но она должна работать для любой месяц Посоветуйте, пожалуйста, как это можно сделать?

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

относительная дельта на помощь!

Вы захотите сделать что-то вроде:

  1. Получить последнюю ДАТУ месяца
  2. Пересчитать эту ДАТУ в ДЕНЬ, используя относительную деталу
  3. Перевести ДЕНЬ во вторник к ДАТЕ (это последний вторник месяца)
  4. Вычесть одну неделю из этой ДАТЫ

Как вы можете сказать, будьте осторожны с DATE и DAY

1 голос
/ 10 апреля 2020

Похоже, что вы можете получить все дни из Calendar.itermonthdays4() и отфильтровать их по дням и месяцам. Затем просто индексируйте второй до последнего с помощью [-2]

import calendar

c = calendar.Calendar()
year = 2020
day = 1

for month in range(1, 13):
    secondLastTues = list(filter(lambda d:d[3] == day and d[1] == month, 
                                 c.itermonthdays4(year, month)))[-2]
    print(secondLastTues)

Результат:

(2020, 1, 21, 1)
(2020, 2, 18, 1)
(2020, 3, 24, 1)
(2020, 4, 21, 1)
(2020, 5, 19, 1)
(2020, 6, 23, 1)
(2020, 7, 21, 1)
(2020, 8, 18, 1)
(2020, 9, 22, 1)
(2020, 10, 20, 1)
(2020, 11, 17, 1)
(2020, 12, 22, 1)
0 голосов
/ 10 апреля 2020

Вы можете попробовать это.

weeks=str.split('\n')
if len(weeks[-1].split())<3: print(weeks[-3][2])
else: print(weeks[-2][2])

Это напечатает второй в прошлый вторник. Надеюсь, это полезно. Вы можете комментировать, если это не ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...