Я хотел бы, чтобы объект 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
Кстати, это работает с любым номером, поэтому я рекомендую вам сделать модуль из него. Особенно, если вы делаете много пользовательских программ …