Obteniu el dia de la setmana o el mes a partir d’una data a Python com a cadena (p. ex., alemany o anglès)

Negocis

Utilitzant la biblioteca estàndard datetime de Python, podeu crear un objecte datetime a partir d’una cadena de data i obtenir-ne el nom del dia de la setmana o del mes com a cadena. Tanmateix, l’idioma d’aquestes cadenes depèn de la configuració regional (país o regió) de l’entorn.

Aquí hi ha dues maneres d’obtenir el nom del dia de la setmana o del mes a partir d’una data com a cadena en qualsevol idioma.

  • Canvieu la configuració regional amb el mòdul de configuració regional
  • Definiu una nova funció

Per obtenir més informació sobre l’ús bàsic del mòdul datetime i els mètodes strptime() i strftime() per convertir entre data i hora (data, hora) i cadenes, consulteu els articles següents.

Canvia la configuració regional amb el mòdul de configuració regional

La biblioteca estàndard de Python proporciona un mòdul local per controlar la configuració regional.

Depèn de l’entorn, però a l’entorn d’exemple, utilitzant el codi de format següent en el mètode strftime(), els noms dels dies de la setmana i dels mesos es poden obtenir en notació anglesa.
%A,%a,%B,%b

L’exemple següent utilitza un objecte de data i hora per representar la data i l’hora (data i hora), però el mateix passa amb un objecte de data que només té informació de data.

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ó de la categoria regional per al format de l’hora, es verifica amb locale.getlocale() i s’estableix en Cap. Aquest resultat depèn de l’entorn.

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

LC_TIME al japonès (UTF-8) ja_JP.UTF-8 a locale.setlocale() per obtenir els noms del dia i del mes en japonès. local.LC_ALL es pot utilitzar per establir totes les categories de configuració regional, però tingueu en compte que això afectarà, per exemple, LC_MONETARY, per exemple.

Tingueu en compte que aquests canvis només són efectius en aquest codi. No vol dir que les variables d’entorn del sistema es reescriguin.

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

També podeu canviar la configuració regional per utilitzar altres anotacions d’idiomes, com ara l’anglès o l’alemany.

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 voleu obtenir el dia de la setmana d’una data determinada a partir d’una cadena de dates en qualsevol idioma, podeu fer-ho seguint els passos següents.

  • LC_TIME al valor de la configuració d’idioma desitjada (p. ex., ja_JP.UTF-8) a locale.setlocale()
  • Convertint una cadena en un objecte de data i hora amb strptime()
  • Truqueu a strftime() en aquest objecte datetime amb el codi de format següent:%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)
# 月曜日

Definiu una nova funció

Això es pot aconseguir mitjançant la definició d’una nova funció.

El mètode weekday() de l’objecte datetime dóna un valor enter de 0 per al dilluns i 6 per al diumenge.

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

Hi ha un mètode similar, isoweekday(), que retorna un valor enter d’1 per dilluns i 7 per diumenge. Tingueu en compte que hi ha una diferència subtil.

print(dt.isoweekday())
# 1

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

Si definim una llista de noms dels dies de la setmana per a cada cadena d’idioma i els recuperem mitjançant els valors enters obtinguts pel mètode weekday(), podem assolir el nostre objectiu.