使用Python打印明年每个月的最后一个星期二的日期

时间:2017-06-01 10:53:38

标签: python date datetime

如何使用Python打印明年每个月的最后一个星期二的日期。

例如,输出的第一行将是:30 / Jan / 2018

我不希望只有前三个字符的月份全名!

目前我已经想出如何进入明年:

import datetime

now = datetime.datetime.now()
next_year = now.year + 1

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

calendar模块非常适用于此:

您可以使用calendar.month_abbr这是一个数组    缩写几个月就像你想要的那样。

week是一个数组,表示从星期一开始的星期几,因此星期二将是week[1]

import calendar
import datetime

now = datetime.datetime.now()
next_year = now.year + 1

for month in range(1, 13):
    last_tuesday = max(week[1] for week in calendar.monthcalendar(next_year, month))
    print('{}/{}/{}'.format(last_tuesday, calendar.month_abbr[month], next_year))

<强>输出:

30/Jan/2018
27/Feb/2018
27/Mar/2018
24/Apr/2018
29/May/2018
26/Jun/2018
31/Jul/2018
28/Aug/2018
25/Sep/2018
30/Oct/2018
27/Nov/2018
25/Dec/2018

答案 1 :(得分:1)

我还建议使用pandas DateOffset对象LastWeekOfMonth

  

描述每月最后一周的月度日期,例如“上周二   每个月“

from pandas.tseries.offsets import LastWeekOfMonth

def last_tues(year):
    return (pd.date_range('1/1/' + str(year), periods=12, freq='M')
           - LastWeekOfMonth(n=1, weekday=1)).strftime('%d/%b/%Y'))

last_tues(2018)
Out[31]: 
array(['30/Jan/2018', '27/Feb/2018', '27/Mar/2018', '24/Apr/2018',
       '29/May/2018', '26/Jun/2018', '26/Jun/2018', '28/Aug/2018',
       '25/Sep/2018', '30/Oct/2018', '27/Nov/2018', '25/Dec/2018'], 
      dtype='<U11')