Seite 1 von 1
Suche formatstring für datetime-object
Verfasst: Freitag 30. November 2012, 15:41
von mutetella
Hallo,
gibt es eine Möglichkeit, die 'format()'-specifier mit denen von datetime-Objekten zu kombinieren?
Code: Alles auswählen
>>> d = datetime.datetime.now()
>>> '{0:<15%d.%m.%Y}'.format(d) #Nicht das Ergebnis, das ich möchte
'<1530.11.2012'
>>> '{0:<15}'.format(d.strftime('%d.%m.%Y')) #Nicht die Syntax, die ich möchte
'30.11.2012 '
mutetella
Re: Suche formatstring für datetime-object
Verfasst: Freitag 30. November 2012, 15:43
von lutz.horn
Welches Ergebnis möchtest Du denn?
Re: Suche formatstring für datetime-object
Verfasst: Freitag 30. November 2012, 15:50
von BlackJack
@lutz.horn: Na doch wohl offensichtlich das Ergebnis bei der Syntax die er nicht möchte.
Re: Suche formatstring für datetime-object
Verfasst: Freitag 30. November 2012, 16:42
von lunar
@mutetella Es gibt keine solche Möglichkeit.
".format()" ruft in der Regel für jeden Platzhalter die ".__format__()"-Methode des jeweiligen Objekts auf, in diesem Fall also "datetime.__format__". Die Dokumentation dieser Methode ist so einfach wie präzise:
Code: Alles auswählen
dt.__format__?
Type: builtin_function_or_method
String Form:<built-in method __format__ of datetime.datetime object at 0x7f80ce5f6d78>
Docstring: Formats self with strftime.
"datetime.__format__()" ist letztlich also äquivalent zu "datetime.strftime()":
Code: Alles auswählen
In [14]: dt.__format__("%d.%m.%Y")
Out[14]: '30.11.2012'
In [15]: dt.strftime("%d.%m.%Y")
Out[15]: '30.11.2012'
In [16]: dt.__format__("<15%d.%m.%Y")
Out[16]: '<1530.11.2012'
In [17]: dt.strftime("<15%d.%m.%Y")
Out[17]: '<1530.11.2012'
Die Formatspezifikation wird also entsprechend
den Regeln für ".strftime()" interpretiert, und diese Regeln sehen keine besondere Interpretation für "<15" vor.
Diese Formatspezifikation ist spezifisch für Zahlen und Zeichenketten:
Code: Alles auswählen
In [22]: 'foo'.__format__('>15')
Out[22]: ' foo'
In [24]: dt.strftime("%d.%m.%Y").__format__(">15")
Out[24]: ' 30.11.2012'
Du sieht also, dass Dein zweiter Versuch funktioniert, weil Du das Objekt zuerst in eine Zeichenketten konvertierst, so dass dann die Regeln für Zeichenkettenformatierung greifen.
Der Blick in den
Quelltext des datetime-Moduls bestätigt dann auch, dass
datetime.__format__ einfach nur an
"datetime.strftime()" delegiert.
Re: Suche formatstring für datetime-object
Verfasst: Freitag 30. November 2012, 17:15
von mutetella
Danke für Eure Antworten!
mutetella