2009-06-12 21 views

Respuesta

37

Puede acaba de establecer la configuración regional, como en este ejemplo:

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

Por cierto, no funcionará bajo Windows. Comprueba esto: http://stackoverflow.com/questions/955986/what-is-the-correct-way-to-set-pythons-locale/956084#956084 – uolot

+6

También requiere que la computadora donde ejecutas esto tenga la configuración regional Estás tratando de usar generado. En los sistemas GNU/Linux, locale -a le dará la lista de las configuraciones regionales disponibles. Los pasos para agregar nuevas configuraciones regionales difieren entre las distribuciones. –

+1

Se desaconseja obtener el formato de fecha/hora localizado ** cambiando la configuración regional **. Vea mi respuesta para la solución correcta. –

8

Otra opción es:

>>> 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' no está disponible en Windows (Python 2.7.8). Ver mi respuesta para una plataforma compatible. – schlamar

12

Debe utilizar %x y %X dar formato a la cadena de fecha en la configuración regional correcta. P.ej. en sueco, una fecha se representa como 2014-11-14 en lugar de 11/14/2014.

La forma correcta para obtener el resultado como Unicode es:

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

Este es el resultado de múltiples idiomas:

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

¡Genial! pero por favor mencione que '.decode' es requerido solo para Python 2 – socketpair

23

Si su aplicación se supone que soportar más de una localidad a continuación, obtener se desaconseja el formato localizado de fecha/hora cambiando la configuración regional (por medio de locale.setlocale()). Para una explicación por qué es una mala idea ver de Alex Martelli answer a la la pregunta Using Python locale or equivalent in web applications? (básicamente local es global y afecta a toda la aplicación por lo que cambiar esto podría cambiar la conducta de otras partes de la solicitud)

Puede hacerlo limpiamente utilizando el paquete de Babel como esto:

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

Ver Date and Time sección en la documentación de Babel.

0

solución para el idioma ruso y multiplataforma

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

Cuestiones relacionadas