2009-06-12 17 views
30

Wie bekomme ich datetime.datetime.now() in der Muttersprache ausgedruckt?Formatierung des Datums in Python

>>> session.deathDate.strftime("%a, %d %b %Y") 
    'Fri, 12 Jun 2009' 

Ich möchte das gleiche Ergebnis aber in der Landessprache erhalten.

Antwort

37

Sie können nur das Gebietsschema festgelegt, wie in diesem Beispiel:

>>> import time 
>>> print time.strftime("%a, %d %b %Y %H:%M:%S") 
Sun, 23 Oct 2005 20:38:56 
>>> import locale 
>>> locale.setlocale(locale.LC_TIME, "sv_SE") # swedish 
'sv_SE' 
>>> print time.strftime("%a, %d %b %Y %H:%M:%S") 
sön, 23 okt 2005 20:39:15 
+10

BTW wird es nicht unter Windows arbeiten. Überprüfen Sie dies: http://stackoverflow.com/questions/955986/what-is-the-correct-way-to-set-pythons-locale/956084#956084 – uolot

+6

Es erfordert auch den Computer, auf dem Sie dies ausführen, um das Gebietsschema zu haben Sie versuchen, generated zu verwenden. Auf GNU/Linux-Systemen zeigt locale -a die Liste der verfügbaren Ländereinstellungen an. Die Schritte zum Hinzufügen neuer Gebietsschemata unterscheiden sich je nach Distros. –

+1

Es wird abgeraten, das lokalisierte Format von Datum/Uhrzeit durch ** Änderung des Gebiets zu erhalten **. Siehe meine Antwort für die richtige Lösung. –

8

Eine weitere Option ist:

>>> import locale 
>>> import datetime 
>>> locale.setlocale(locale.LC_TIME,'') 
'es_CR.UTF-8' 
>>> date_format = locale.nl_langinfo(locale.D_FMT) 
>>> date_format 
'%d/%m/%Y' 
>>> today = datetime.date.today() 
>>> today 
datetime.date(2012, 4, 23) 
>>> today.strftime(date_format) 
'23/04/2012' 
+0

'nl_langinfo' ist unter Windows nicht verfügbar (Python 2.7.8). Siehe meine Antwort für eine Plattform-kompatible Art. – schlamar

12

sollten Sie verwenden %x und %X die Datumszeichenfolge in der richtigen locale zu formatieren. Z.B. auf Schwedisch wird ein Datum als 2014-11-14 anstelle von 11/14/2014 dargestellt.

Der richtige Weg, um das Ergebnis zu erhalten, wie Unicode ist:

locale.setlocale(locale.LC_ALL, lang) 
format_ = datetime.datetime.today().strftime('%a, %x %X') 
format_u = format_.decode(locale.getlocale()[1]) 

Hier ist das Ergebnis von mehreren Sprachen:

Bulgarian пет, 14.11.2014 г. 11:21:10 ч. 
Czech pá, 14.11.2014 11:21:10 
Danish fr, 14-11-2014 11:21:10 
German Fr, 14.11.2014 11:21:10 
Greek Παρ, 14/11/2014 11:21:10 πμ 
English Fri, 11/14/2014 11:21:10 AM 
Spanish vie, 14/11/2014 11:21:10 
Estonian R, 14.11.2014 11:21:10 
Finnish pe, 14.11.2014 11:21:10 
French ven., 14/11/2014 11:21:10 
Croatian pet, 14.11.2014. 11:21:10 
Hungarian P, 2014.11.14. 11:21:10 
Italian ven, 14/11/2014 11:21:10 
Lithuanian Pn, 2014.11.14 11:21:10 
Latvian pk, 2014.11.14. 11:21:10 
Dutch vr, 14-11-2014 11:21:10 
Norwegian fr, 14.11.2014 11:21:10 
Polish Pt, 2014-11-14 11:21:10 
Portuguese sex, 14/11/2014 11:21:10 
Romanian V, 14.11.2014 11:21:10 
Russian Пт, 14.11.2014 11:21:10 
Slovak pi, 14. 11. 2014 11:21:10 
Slovenian pet, 14.11.2014 11:21:10 
Swedish fr, 2014-11-14 11:21:10 
Turkish Cum, 14.11.2014 11:21:10 
Chinese 周五, 2014/11/14 11:21:10 
+0

Großartig! aber bitte erwähnen Sie, dass '.decode' nur für Python 2 benötigt wird – socketpair

23

Wenn Ihr Antrag soll mehr als ein Gebietsschema dann zur Unterstützung bekommen Das lokalisierte Format von Datum/Uhrzeit durch Ändern der Ländereinstellung (mittels locale.setlocale()) wird abgeraten. Zur Erklärung, warum es eine schlechte Idee, Alex Martelli sehen answer auf die die Frage Using Python locale or equivalent in web applications? (im Grunde ist locale global und ganze Anwendung wirkt sich so zu ändern, es könnte Verhalten anderer Teile Anwendung ändern)

Sie können es Paket sauber mit Babel tun wie dies:

>>> from datetime import date, datetime, time 
>>> from babel.dates import format_date, format_datetime, format_time 

>>> d = date(2007, 4, 1) 
>>> format_date(d, locale='en') 
u'Apr 1, 2007' 
>>> format_date(d, locale='de_DE') 
u'01.04.2007' 

Siehe Date and Time Abschnitt in Babel in der Dokumentation.

0

Lösung für russische Sprache und Cross-Plattform

import sys 
import locale 
import datetime 

if sys.platform == 'win32': 
    locale.setlocale(locale.LC_ALL, 'rus_rus') 
else: 
    locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8') 

print(datetime.date.today().strftime("%B %Y")) 

Ноябрь 2017