Obtener el día de la semana o el mes de una fecha en Python como una cadena (por ejemplo, alemán o inglés)

Negocio

Utilizando la biblioteca estándar de Python, datetime, puedes crear un objeto datetime a partir de una cadena de fecha y obtener de ella el nombre del día de la semana o del mes como una cadena. Sin embargo, el idioma de esas cadenas depende de la configuración regional (país o región) del entorno.

Aquí hay dos maneras de obtener el nombre del día de la semana o del mes a partir de una fecha como cadena en cualquier idioma.

  • Cambiar la configuración regional con el módulo locale
  • Definir una nueva función

Para más información sobre el uso básico del módulo datetime y de los métodos strptime() y strftime() para la conversión entre fecha y hora (date, time) y cadenas, consulte los siguientes artículos.

Cambiar la configuración regional con el módulo de configuración regional

La biblioteca estándar de Python proporciona un módulo de configuración regional para controlar la configuración regional.

Depende del entorno, pero en el entorno del ejemplo, utilizando el siguiente código de formato en el método strftime(), se pueden obtener los nombres de los días de la semana y los meses en notación inglesa.
%A, %a, %B, %b

El siguiente ejemplo utiliza un objeto datetime para representar la fecha y la hora (fecha y hora), pero lo mismo ocurre con un objeto date que sólo tiene información sobre la fecha.

import datetime
import locale

dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00

print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan

LC_TIME, la configuración de la categoría locale para el formato de la hora, se comprueba con locale.getlocale(), y se establece como None. Este resultado depende del entorno.

print(locale.getlocale(locale.LC_TIME))
# (None, None)

LC_TIME al japonés (UTF-8) ja_JP.UTF-8 en locale.setlocale() para obtener los nombres del día y del mes en japonés. locale.LC_ALL puede utilizarse para establecer todas las categorías de localización, pero tenga en cuenta que esto afectará, por ejemplo, a LC_MONETARY.

Tenga en cuenta que estos cambios sólo son efectivos en este código. No significa que las variables de entorno del sistema serán reescritas.

locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(locale.getlocale(locale.LC_TIME))
# ('ja_JP', 'UTF-8')

print(dt.strftime('%A, %a, %B, %b'))
# 月曜日, 月, 1月,  1

También puedes cambiar la configuración regional para utilizar otras notaciones de idioma, como el inglés o el alemán.

locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan

locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Montag, Mo, Januar, Jan

Si desea obtener el día de la semana de una fecha determinada a partir de una cadena de fecha en cualquier idioma, puede hacerlo siguiendo los pasos siguientes.

  • LC_TIME al valor de la configuración del idioma deseado (por ejemplo, ja_JP.UTF-8) en locale.setlocale()
  • Convertir una cadena en un objeto datetime con strptime()
  • Llame a strftime() en ese objeto datetime con el siguiente código de formato: %A, %a, %B, %b
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')

s = '2018-01-01'
s_dow = datetime.datetime.strptime(s, '%Y-%m-%d').strftime('%A')

print(s_dow)
# 月曜日

Definir una nueva función

Esto puede lograrse definiendo una nueva función.

El método weekday() del objeto datetime da un valor entero de 0 para el lunes y 6 para el domingo.

import datetime

dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00

print(dt.weekday())
# 0

print(type(dt.weekday()))
# <class 'int'>

Existe un método similar, isoweekday(), que devuelve un valor entero de 1 para el lunes y 7 para el domingo. Tenga en cuenta que hay una sutil diferencia.

print(dt.isoweekday())
# 1

print(type(dt.isoweekday()))
# <class 'int'>

Si definimos una lista de nombres de los días de la semana para cada cadena de idioma y los recuperamos utilizando los valores enteros obtenidos por el método weekday(), podemos lograr nuestro objetivo.

Copied title and URL