每个月的倒数第二个星期二

Second last Tuesday for every month

如何获取一个月的倒数第二个星期二的日期?

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 号,但它应该适用于任何月份。请告知如何做到这一点?

你可以试试这个。

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

这将在上周二打印第二张。希望这会有所帮助。不清楚的可以评论。

relative delta 救援!

您需要执行以下操作:

  1. 获取该月的最后一个 DATE
  2. 使用相对数据将 DATE 转换为 DAY
  3. 按 DATE 将 DAY 倒推到星期二(即该月的最后一个星期二)
  4. 从该日期减去一周

如您所知,请注意 DATE 和 DAY

您似乎可以从 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)