Warum speichert Python deutsche und spanische (und andere?) Zeitformat-Strings als% T im Gebietsschema-Modul?

8

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

zu tun %Vor%

um diese Fälle zu behandeln?

    
Staunch 25.08.2011, 20:15
quelle

2 Antworten

1

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.

    
Staunch 29.08.2011, 18:13
quelle
0

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%     
Mihai Stan 29.08.2011 07:15
quelle