2009-06-12 9 views
30

Comment puis-je obtenir datetime.datetime.now() dans la langue maternelle?Mise en forme de date locale en Python

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

Je voudrais obtenir le même résultat mais dans la langue locale.

Répondre

37

Vous pouvez simplement définir les paramètres régionaux comme dans cet exemple:

>>> 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 il ne fonctionnera pas sous Windows. Vérifiez cela: http://stackoverflow.com/questions/955986/what-is-the-correct-way-to-set-pythons-locale/956084#956084 – uolot

+6

Il faut également que l'ordinateur sur lequel vous exécutez cette commande ait les paramètres régionaux vous essayez d'utiliser généré. Sur les systèmes GNU/Linux, locale -a vous donnera la liste des paramètres régionaux disponibles. Les étapes d'ajout de nouveaux paramètres régionaux diffèrent entre les distributions. –

+1

L'obtention du format localisé de date/heure par ** changement de paramètres régionaux est déconseillée **. Voir ma réponse pour la bonne solution. –

8

Une autre option est:

>>> 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' n'est pas disponible sous Windows (Python 2.7.8). Voir ma réponse pour une manière compatible avec la plate-forme. – schlamar

12

Vous devez utiliser %x et %X pour formater la chaîne de date dans les paramètres régionaux correct. Par exemple. en suédois, une date est représentée par 2014-11-14 au lieu de 11/14/2014.

La bonne façon d'obtenir le résultat que Unicode est:

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

Voici le résultat de plusieurs langues:

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

Super! mais veuillez mentionner que '.decode' est requis seulement pour Python 2 – socketpair

23

Si votre application est censée prendre en charge plus d'un lieu alors obtenir le format localisé de la date/heure en changeant les paramètres régionaux (au moyen de locale.setlocale()) est déconseillé. Pour expliquer pourquoi il est une mauvaise idée voir Alex answer de Martelli à la question Using Python locale or equivalent in web applications? (essentiellement locale est globale et affecte l'application tout afin de changer cela pourrait changer le comportement des autres parties de l'application)

Vous pouvez le faire en utilisant proprement paquet Babel comme ceci:

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

Voir la section Date and Time dans la documentation de Babel.

0

solution pour la langue russe et multiplateforme

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