使用 strftime 更改为字符串时如何将 datetime.date 更改为 st,nd,rd,th

问题描述

ex1)
date1 = datetime.date(2021,1,26)
date2 ='Tuesday,January 26th,2021'

ex2)
date1 = datetime.date(2021,2,21)
date2 = 'Sunday,February 21st,2021'

我想将 date1 更改为 date2。我该怎么办?

我试过了,但它没有像 datetime.date(2021,21),datetime.date(2021,2),datetime.date( 2021,23)

date1 = strftime('%A,%B %dth,%Y')

解决方法

您正在寻找 ordinal numeral。借用Ordinal numbers replacement,你可以使用

import datetime

ordinal = lambda n: f"{n:d}{'tsnrhtdd'[(n//10%10!=1)*(n%10<4)*n%10::4]}"

date1 = datetime.date(2021,1,26)

dayOrdinal = ordinal(date1.day)

date1_string = date1.strftime(f'%A,%B {dayOrdinal},%Y')
# 'Tuesday,January 26th,2021'