如何使用Python打印明年每个月的最后一个星期二的日期。
例如,输出的第一行将是:30 / Jan / 2018
我不希望只有前三个字符的月份全名!
目前我已经想出如何进入明年:
import datetime
now = datetime.datetime.now()
next_year = now.year + 1
有人可以帮忙吗?
答案 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')