Usando la libreria standard datetime di Python, potete creare un oggetto datetime da una stringa di data e ottenere il nome del giorno della settimana o del mese da essa come stringa. Tuttavia, la lingua di queste stringhe dipende dal locale (impostazione del paese o della regione) dell'ambiente.
Ecco due modi per ottenere il nome del giorno della settimana o del mese da una data come stringa in qualsiasi lingua.
- Cambiare il locale con il modulo locale
- Definire una nuova funzione
Per maggiori informazioni sull'uso di base del modulo datetime e dei metodi strptime() e strftime() per la conversione tra data e ora (date, time) e stringhe, fate riferimento ai seguenti articoli.
- Articoli correlati:Conversione di date e orari da e verso stringhe con datetime di Python(
strftime
,strptime
)
Cambiare il locale con il modulo locale
La libreria standard di Python fornisce un modulo locale per controllare le impostazioni locali.
Dipende dall'ambiente, ma nell'ambiente di esempio, usando il seguente codice di formattazione nel metodo strftime(), i nomi dei giorni della settimana e dei mesi possono essere ottenuti in notazione inglese.%A
, %a
, %B
, %b
L'esempio seguente usa un oggetto datetime per rappresentare data e ora (date and time), ma lo stesso vale per un oggetto date che ha solo informazioni sulla 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, l'impostazione della categoria locale per la formattazione dell'ora, viene controllata con locale.getlocale(), ed è impostata su None. Questo risultato dipende dall'ambiente.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME al giapponese (UTF-8) ja_JP.UTF-8 in locale.setlocale() per ottenere i nomi del giorno e del mese in giapponese. locale.LC_ALL può essere usato per impostare tutte le categorie di locale, ma si noti che questo influenzerà, ad esempio, LC_MONETARY.
Notate che questi cambiamenti sono efficaci solo in questo codice. Non significa che le variabili d'ambiente del sistema saranno riscritte.
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
Potete anche cambiare le impostazioni della localizzazione per utilizzare altre notazioni linguistiche, come l'inglese o il tedesco.
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
Se volete ottenere il giorno della settimana per una data data da una stringa di data in qualsiasi lingua, potete farlo seguendo i passi seguenti.
- LC_TIME al valore dell'impostazione della lingua desiderata (ad esempio ja_JP.UTF-8) in locale.setlocale()
- Convertire una stringa in un oggetto datetime con strptime()
- Chiamate strftime() su quell'oggetto datetime con il seguente codice di formattazione:
%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)
# 月曜日
Definire una nuova funzione
Questo può essere ottenuto definendo una nuova funzione.
Il metodo weekday() dell'oggetto datetime dà un valore intero di 0 per il lunedì e 6 per la domenica.
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'>
C'è un metodo simile, isoweekday(), che restituisce un valore intero di 1 per lunedì e 7 per domenica. Notate che c'è una sottile differenza.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Se definiamo una lista di nomi dei giorni della settimana per ogni stringa di lingua e li recuperiamo usando i valori interi ottenuti dal metodo weekday(), possiamo raggiungere il nostro obiettivo.