Ottenere il giorno della settimana o del mese da una data in Python come stringa (ad es. tedesco o inglese)

Attività commerciale

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.

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.

Copied title and URL