ich versuche eine Möglichkeit zu finden Daten bzw. Uhrzeiten lokalisiert zu formatieren und zu parsen.
Dabei ist die eigentliche Problematik, dass die "default locale"-Einstellung des Systems ("de_DE") von der Lokalisierung des Input / Output abweicht ("en_US").
Ich möchte also folgendes erzielen:
- einen lokalisierten String zu einem "datetime"-Objekt parsen,
- mittels eines "datetime"-Objekts einen formatierten String erzeugen (selbes "locale" und Muster wie Input).
Während meiner Recherche bin ich auf folgende zwei Möglichkeiten gestoßen:
- Verändern der globalen "locale"-Einstellung.
Dieser Ansatz ist meiner Meinung nach etwas problematisch, da er einen globalen Wert manipuliert und daraus ggf. unerwünschte Nebeneffekte entstehen können.Code: Alles auswählen
import datetime import locale locale.setlocale(locale.LC_TIME, "en_US.UTF-8") dt = datetime.datetime.strptime("Thu 3 Apr 2014 13:19:52", "%a %d %b %Y %H:%M:%S") # datetime.datetime(2014, 4, 3, 13, 19, 52) dtr_str = dt.strftime("%a %-d %b %Y %H:%M:%S") # 'Thu 3 Apr 2014 13:19:52'
- Verwenden der Python Bibliothek babel.
Der Vorteil hieran ist, dass das gewünschte "locale" der Methode zum Formatieren einfach übergeben werden kann.
Leider scheint babel nicht das Parsen beliebiger Muster zu unterstützen. (Offenbar funktioniert nur das Format "short" wirklich zuverlässig, welches mein Input allerdings nicht hat.)
Code: Alles auswählen
import babel.dates # installed via pip import datetime dt = datetime.datetime(2014, 4, 3, 13, 19, 52) dt_str = babel.dates.format_datetime(dt, "EEE d MMM yyyy H:mm:ss", locale="en_US") # 'Thu 3 Apr 2014 13:19:52'
Gibt es eine Möglichkeit die beschriebenen Konvertierungen durchzuführen ohne die globale "locale"-Einstellung zu verändern?
Diese Frage wurde in englischer Sprache auch auf stackoverflow gepostet.
Mit freundlichen Grüßen
AFoeee