python формат datetime с "st", "nd", "rd", "th" (английский порядковый суффикс), как PHP "S"

Я хотел бы, чтобы объект datetime python выводил (и использовал результат в django) следующим образом:

Thu the 2nd at 4:30 

Но я не нахожу пути в python для вывода st , nd , rd или th как я могу, с форматированием даты и времени PHP с помощью строки S (что они называют «английским ординарным суффиксом») ( http://uk.php.net/manual /en/function.date.php ).

Есть ли встроенный способ сделать это в django / python? strftime недостаточно хорош ( http://docs.python.org/library/datetime.html#strftime-strptime-behavior ).

Django имеет фильтр, который делает то, что я хочу, но я хочу, чтобы функция, а не фильтр, выполняла то, что я хочу. Либо функция django, либо python будет в порядке.

Django.utils.dateformat имеет format функции format который принимает два аргумента, первый из которых представляет собой дату (экземпляр datetime.date [[или datetime.datetime ]], где datetime является модулем в стандартной библиотеке Python), второй является строкой формата и возвращает полученную форматированную строку. Элемент формата верхнего регистра – S (если, конечно, часть строки формата) – это тот, который расширяется до правильного значения «st», «nd», «rd» или «th», в зависимости от дня, месяц указанной даты.

не знаю о встроенном, но я использовал это …

 def ord(n): return str(n)+("th" if 4<=n%100<=20 else {1:"st",2:"nd",3:"rd"}.get(n%10, "th")) 

а также:

 def dtStylish(dt,f): return dt.strftime(f).replace("{th}", ord(dt.day)) 

Вы можете сделать это, просто используя библиотеку гуманизации

from django.contrib.humanize.templatetags.humanize import ordinal

Затем вы можете просто дать ординал любое целое число, т. Е.

ordinal(2) вернет 2nd

Вот код fancier:

 def date_extention(number): if number%10 == 1: return '%dst' % number if number%10 == 2: return '%dnd' % number if number%10 == 3: return '%drd' % number if (number%10 >= 4) or (number%10== 0): return '%dth' % number 

Кстати, это работает с любым номером, поэтому я рекомендую вам сделать модуль из него. Особенно, если вы делаете много пользовательских программ …