versiones guia español descargar actualizar python locale strftime setlocale

python - guia - ¿Cómo ejecuto un objeto de fecha en una configuración regional diferente?



qgis manual (3)

El ejemplo dado por Rob es excelente, pero no es seguro para hilos. Aquí hay una versión que funciona con hilos:

import locale import threading from datetime import datetime from contextlib import contextmanager LOCALE_LOCK = threading.Lock() @contextmanager def setlocale(name): with LOCALE_LOCK: saved = locale.setlocale(locale.LC_ALL) try: yield locale.setlocale(locale.LC_ALL, name) finally: locale.setlocale(locale.LC_ALL, saved) # Let''s set a non-US locale locale.setlocale(locale.LC_ALL, ''de_DE.UTF-8'') # Example to write a formatted English date with setlocale(''C''): print(datetime.now().strftime(''%a, %b'')) # e.g. => "Thu, Jun" # Example to read a formatted English date with setlocale(''C''): mydate = datetime.strptime(''Thu, Jun'', ''%a, %b'')

Crea un administrador de contexto seguro para subprocesos mediante un bloqueo global y le permite tener varios subprocesos que ejecutan código dependiente de la configuración regional mediante el uso de LOCALE_LOCK. También maneja las excepciones de la declaración de rendimiento para garantizar que la configuración regional original siempre se restaure.

Tengo un objeto de fecha en Python y necesito generar una marca de tiempo en la configuración regional C para un sistema heredado, usando los códigos% a (día de la semana) y% b (mes). Sin embargo, no deseo cambiar la configuración regional de la aplicación, ya que otras partes deben respetar la configuración regional actual del usuario. ¿Hay una manera de llamar a strftime () con un determinado local?


No, no hay forma de llamar a strftime() con una configuración regional específica.

Suponiendo que su aplicación no sea multihebra, guarde y restaure la configuración regional existente, y establezca su configuración regional en ''C'' cuando invoque strftime .

#! /usr/bin/python3 import time import locale def get_c_locale_abbrev(): lc = locale.setlocale(locale.LC_TIME) try: locale.setlocale(locale.LC_TIME, "C") return time.strftime("%a-%b") finally: locale.setlocale(locale.LC_TIME, lc) # Let''s suppose that we''re french locale.setlocale(locale.LC_ALL, ''fr_FR.utf8'') # Should print french, english, then french print(time.strftime(''%a-%b'')) print(get_c_locale_abbrev()) print(time.strftime(''%a-%b''))

Si prefieres with: para try: - finally: puedes activar un administrador de contexto:

#! /usr/bin/python3 import time import locale import contextlib @contextlib.contextmanager def setlocale(*args, **kw): saved = locale.setlocale(locale.LC_ALL) yield locale.setlocale(*args, **kw) locale.setlocale(locale.LC_ALL, saved) def get_c_locale_abbrev(): with setlocale(locale.LC_TIME, "C"): return time.strftime("%a-%b") # Let''s suppose that we''re french locale.setlocale(locale.LC_ALL, ''fr_FR.utf8'') # Should print french, english, then french print(time.strftime(''%a-%b'')) print(get_c_locale_abbrev()) print(time.strftime(''%a-%b''))


Echa un vistazo al paquete pytz

puedes usar asi

import pytz UTC = pytz.timezone(''UTC'') # utc fr = pytz.timezone(''Europe/Paris'') #your local from datetime import datetime date = datetime.now(fr) dateUTC = date.astimezone(UTC)

strftime se representará en la zona horaria especificada

para tener el nombre del mes en el calendar uso de configuración regional, por ejemplo:

import calendar print calendar.month_name[dateUTC.month] #will print in the locale

Inspecciona más profundamente el calendario para tener más información.