it-swarm.com.de

Datumsformatierung des Gebietsschemas in Python

Wie kann ich datetime.datetime.now() in der Muttersprache ausdrucken?

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

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

35
Alex

Sie können das Gebietsschema einfach wie in diesem Beispiel festlegen:

>>> 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
47
mikl

Wenn Ihre Anwendung mehr als ein Gebietsschema unterstützen soll, wird davon abgeraten, durch Ändern des Gebietsschemas (mithilfe von locale.setlocale()) ein lokalisiertes Datums-/Uhrzeitformat zu erhalten. Eine Erklärung, warum dies eine schlechte Idee ist, finden Sie in Alex Martellis Antwort auf die Frage Verwenden von Python locale oder Äquivalent in Webanwendungen? (im Grunde genommen locale) ist global und wirkt sich auf die gesamte Anwendung aus.

Sie können es sauber mit Babel-Paket wie folgt machen:

>>> 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 Datum und Uhrzeit in der Dokumentation von Babel.

39
Piotr Dobrogost

Sie sollten %x und %X verwenden, um die Datumszeichenfolge im richtigen Gebietsschema zu formatieren. Z.B. In Schwedisch wird ein Datum als 2014-11-14 anstelle von 11/14/2014 dargestellt.

Der korrekte Weg, um das Ergebnis als Unicode zu erhalten, 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 aus 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
14
schlamar

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'
8
Havok

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

0
dEll