Показывать дату, например "5 мая", используя pythons strftime?
Возможный дубликат:
Python: Дата выпуска по умолчанию?
В Python time.strftime может достаточно легко выводить вывод, например, "четверг мая 05", но я хотел бы создать строку типа "Четверг, 5 мая" (обратите внимание на дополнительный "th" в дате). Каков наилучший способ сделать это?
Ответы
Ответ 1
strftime
не позволяет форматировать дату с суффиксом.
Здесь можно получить правильный суффикс:
if 4 <= day <= 20 or 24 <= day <= 30:
suffix = "th"
else:
suffix = ["st", "nd", "rd"][day % 10 - 1]
найдено здесь
Обновление:
Сочетание более компактного решения на основе комментария Jochen с ответом gsteff:
from datetime import datetime as dt
def 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())
дает:
May 5th, 2011
Ответ 2
Это, кажется, добавляет соответствующий суффикс и удаляет уродливые ведущие нули в число дней:
#!/usr/bin/python
import time
day_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())
Ответ 3
"%s%s"%(day, 'trnshddt'[0xc0006c000000006c>>2*day&3::4])
Но серьезно, это специфично для локали, поэтому вы должны делать это во время интернационализации.
Ответ 4
from time import strftime
print strftime('%A %B %dth')
Забастовкa >
EDIT:
Исправление после просмотра ответов гуру:
from time import strftime
def special_strftime(dic = {'01':'st','21':'st','31':'st',
'02':'nd','22':'nd',
'03':'rd','23':'rd'}):
x = strftime('%A %B %d')
return x + dic.get(x[-2:],'th')
print special_strftime()
.
EDIT 2
также:
from time import strftime
def special_strftime(dic = {'1':'st','2':'nd','3':'rd'}):
x = strftime('%A %B %d')
return x + ('th' if x[-2:] in ('11','12','13')
else dic.get(x[-1],'th')
print special_strftime()
.
РЕДАКТИРОВАТЬ 3
Наконец, его можно упростить:
from time import strftime
def special_strftime(dic = {'1':'st','2':'nd','3':'rd'}):
x = strftime('%A %B %d')
return x + ('th' if x[-2]=='1' else dic.get(x[-1],'th')
print special_strftime()
Ответ 5
Вы не можете. Функция time.strftime
и метод datetime.datetime.strftime
(как правило) используют функцию платформы C library strftime
платформы, и она (обычно) не предлагает такой формат. Вам нужно будет использовать стороннюю библиотеку, например dateutil.