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]
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())