Ich schreibe einen Test für ein Programm, das in mehreren Gebietsschemas verwendet wird. Während der Test auf Deutsch lief, bekam ich den Fehler
%Vor% Als ich das herausfand, entdeckte ich, dass die Verwendung von locale.nl_langinfo(locale.T_FMT)
in Deutsch oder Spanisch (und möglicherweise in anderen Sprachen) die Formatzeichenfolge '%T'
erzeugt. Dies wird im Modul time
nicht erkannt.
In der Dokumentation zu locale
unter python.org wird nichts über die Rückgabe von '%T'
erwähnt. Der einzige Verweis auf '%T'
, den ich irgendwo finden kann, ist eine Antwort auf eine separate StackOverflow-Frage . Von diesem Post und diesem Kontext nehme ich an, dass '%T'
eine Abkürzung für '%H:%M:%S'
ist.
Meine Frage ist, wie gehe ich mit den Gebietsschemas um, für die locale
'%T'
für ihre Formatzeichenfolge zurückgibt, ohne etwas wie
um diese Fälle zu behandeln?
Das ist eine völlig unbefriedigende Antwort, aber das ist trotzdem die Antwort:
Der Grund, warum locale
und time.strptime
nicht gut zusammenspielen, liegt daran, dass die locale
-Formate nicht für time.strptime
geschrieben wurden. Sie wurden für time.strftime
geschrieben, um die notwendigen Formate für Datum und Uhrzeit zu erzeugen, nicht um sie zu parsen.
Da time.strptime
als plattformunabhängig geschrieben wurde, akzeptiert es nicht so viele Anweisungen wie locale
herausgibt; time.strftime
muss in der Lage sein, alles, was darauf geworfen wird, zu konvertieren, so dass jede plattformdefinierte Direktive akzeptiert wird.
Also, nein, es gibt keinen einfacheren Weg, time
und locale
so zu gestalten, wie ich es möchte.
Tatsächlich sehe ich, dass Sie strptime verwenden, nicht Streichzeit . Und die Dokumentation für strptime erwähnt:
Nur die in der Dokumentation angegebenen Anweisungen werden unterstützt. Da strftime () pro Plattform implementiert wird, kann es manchmal mehr Richtlinien als die aufgeführten bieten. Aber strptime () ist unabhängig von jeder Plattform und unterstützt daher nicht unbedingt alle verfügbaren Direktiven, die nicht als unterstützt dokumentiert sind.
Wie hier hier empfohlen, können Sie einen leistungsstärkeren Date-Parser verwenden, wie dateutil
%Vor%Tags und Links python locale string-formatting time