Display the date, like "May 5th", using pythons strftime? [duplicate] Display the date, like "May 5th", using pythons strftime? [duplicate] python python

Display the date, like "May 5th", using pythons strftime? [duplicate]


strftime doesn't allow you to format a date with a suffix.

Here's a way to get the correct suffix:

if 4 <= day <= 20 or 24 <= day <= 30:    suffix = "th"else:    suffix = ["st", "nd", "rd"][day % 10 - 1]

found here

Update:

Combining a more compact solution based on Jochen's comment with gsteff's answer:

from datetime import datetime as dtdef suffix(d):    return 'th' if 11<=d<=13 else {1:'st',2:'nd',3:'rd'}.get(d%10, 'th')def custom_strftime(format, t):    return t.strftime(format).replace('{S}', str(t.day) + suffix(t.day))print custom_strftime('%B {S}, %Y', dt.now())

Gives:

May 5th, 2011


This seems to add the appropriate suffix, and remove the ugly leading zeroes in the day number:

#!/usr/bin/pythonimport timeday_endings = {    1: 'st',    2: 'nd',    3: 'rd',    21: 'st',    22: 'nd',    23: 'rd',    31: 'st'}def custom_strftime(format, t):    return time.strftime(format, t).replace('{TH}', str(t[2]) + day_endings.get(t[2], 'th'))print custom_strftime('%B {TH}, %Y', time.localtime())


"%s%s"%(day, 'trnshddt'[0xc0006c000000006c>>2*day&3::4])

But seriously, this is locale specific, so you should be doing it during internationalisation