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.
- Articles relacionats:Conversió de dates i hores a i des de cadenes amb datatime de Python(
strftime
,strptime
)
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.