Obtenir le jour de la semaine ou du mois à partir d’une date en Python sous forme de chaîne (par exemple, allemand ou anglais)

Affaires

En utilisant la bibliothèque standard datetime de Python, vous pouvez créer un objet datetime à partir d'une chaîne de date et en obtenir le nom du jour de la semaine ou du mois sous forme de chaîne. Toutefois, la langue de ces chaînes dépend de la locale (paramètre de pays ou de région) de l'environnement.

Voici deux façons d'obtenir le nom du jour de la semaine ou du mois à partir d'une date sous forme de chaîne dans n'importe quelle langue.

  • Changez la locale avec le module locale
  • Définir une nouvelle fonction

Pour plus d'informations sur l'utilisation de base du module datetime et des méthodes strptime() et strftime() pour la conversion entre la date et l'heure (date, heure) et les chaînes de caractères, veuillez consulter les articles suivants.

Changer de locale avec le module locale

La bibliothèque standard Python fournit un module locale pour contrôler les paramètres linguistiques.

Cela dépend de l'environnement, mais dans l'environnement d'exemple, en utilisant le code de formatage suivant dans la méthode strftime(), on peut obtenir les noms des jours de la semaine et des mois en notation anglaise.
%A, %a, %B, %b

L'exemple suivant utilise un objet datetime pour représenter la date et l'heure (date et heure), mais il en va de même pour un objet date qui ne contient que des informations sur la date.

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, le paramètre de catégorie de la locale pour le formatage de l'heure, est vérifié avec locale.getlocale(), et il est défini à None. Ce résultat dépend de l'environnement.

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

LC_TIME en japonais (UTF-8) ja_JP.UTF-8 dans locale.setlocale() pour obtenir les noms du jour et du mois en japonais. locale.LC_ALL peut être utilisée pour définir toutes les catégories de locale, mais notez que cela affectera, par exemple, LC_MONETARY.

Notez que ces changements ne sont effectifs que dans ce code. Cela ne signifie pas que les variables d'environnement du système seront réécrites.

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

Vous pouvez également modifier les paramètres régionaux pour utiliser d'autres notations linguistiques, comme l'anglais ou l'allemand.

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 vous souhaitez obtenir le jour de la semaine pour une date donnée à partir d'une chaîne de date dans n'importe quelle langue, vous pouvez le faire en suivant les étapes ci-dessous.

  • LC_TIME à la valeur du paramètre de langue souhaité (par exemple, ja_JP.UTF-8) dans locale.setlocale()
  • Conversion d'une chaîne de caractères en un objet de type datetime avec strptime()
  • Appelez strftime() sur cet objet datetime avec le code de formatage suivant: %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)
# 月曜日

Définir une nouvelle fonction

Cela peut être réalisé en définissant une nouvelle fonction.

La méthode weekday() de l'objet datetime donne une valeur entière de 0 pour le lundi et de 6 pour le dimanche.

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

Il existe une méthode similaire, isoweekday(), qui renvoie une valeur entière de 1 pour le lundi et de 7 pour le dimanche. Notez qu'il existe une différence subtile.

print(dt.isoweekday())
# 1

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

Si nous définissons une liste de noms de jours de la semaine pour chaque chaîne de langue et que nous les récupérons en utilisant les valeurs entières obtenues par la méthode weekday(), nous pouvons atteindre notre objectif.

Copied title and URL