2010-09-04 3 views
13

Ich möchte ein Python-Datetime-Objekt ausgeben (und das Ergebnis in Django verwenden) dies:Python-Format Datetime mit "st", "nd", "rd", "th" (Englisch Ordinal Suffix) wie PHP "S"

Thu the 2nd at 4:30 

Aber ich finde keine Möglichkeit, in python zur Ausgabe st, nd, rd oder th wie kann ich mit PHP Datetime-Format mit dem S string (http://uk.php.net/manual/en/function.date.php) (Was sie "Anhang der englischen Aufzählung" nennen) .

Gibt es eine eingebaute Möglichkeit, dies in Django/Python zu tun?strftime ist nicht gut genug (http://docs.python.org/library/datetime.html#strftime-strptime-behavior).

Django hat einen Filter, der tut, was ich will, aber ich will eine Funktion, nicht einen Filter, um zu tun, was ich will. Entweder eine Django- oder Python-Funktion ist in Ordnung.

+0

Wenn Sie keine fertige Lösung finden, gibt es einige gute hier, die Sie konvertieren könnten: http://StackOverflow.com/Questions/165713/How-do-i-provide-a -suffix-für-Tage-von- the-month – paxdiablo

Antwort

23

Die django.utils.dateformat hat eine Funktion format dass die erste das Datum (a datetime.date [[oder datetime.datetime]] Beispiel, wo datetime ist das Modul in Python-Standardbibliothek) ist, der zweite ist der Format-String zwei Argumente und gibt die resultierende formatierte Zeichenfolge zurück. Der Großbuchstabe S formatiert sich (wenn ein Teil des Formatzeichens ist, natürlich) ist derjenige, der zu dem richtigen von 'st', 'nd', 'rd' oder 'th' erweitert wird, abhängig vom Tag der Monat des fraglichen Datums.

11

nicht in etwa gebaut weiß, aber ich verwendet, um dieses ...

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

und:

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

Was ist der Punkt von "th" wenn 4 <= n% 100 <= 20'? Der else-Teil deckt alle Fälle ab. – Arijoon

+4

@Arijoon Dieser Teil deckt die Teenager ab, die nicht den gleichen Regeln folgen wie alles andere. Wenn Sie es entfernen, erhalten Sie '11st' oder' 13rd', wenn sie '11th' und' 13th' sind. – Status

-1

Hier ist der Züchter Code:

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 

Durch die Art und Weise diese Werke mit jeder Zahl, also empfehle ich, dass Sie ein Modul daraus machen. Vor allem, wenn Sie viele Benutzer inputed Programme machen ...

+2

"Dies funktioniert mit jeder Nummer" bis zum 11., 12. und 13. – Holloway

3

Sie diese einfach mit Hilfe der humanize Bibliothek tun können

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

Sie können dann nur geben Ordnungs jede ganze Zahl, dh

ordinal(2) wird zurückgegeben 2nd

Verwandte Themen