Ermittelt den Wochentag oder den Monat eines Datums in Python als String (z.B. Deutsch oder Englisch)

Geschäft

Mit der Python-Standardbibliothek datetime können Sie ein datetime-Objekt aus einer Datumszeichenkette erstellen und daraus den Namen des Wochentags oder des Monats als Zeichenkette erhalten. Die Sprache dieser Zeichenketten hängt jedoch vom Gebietsschema (Länder- oder Regioneneinstellung) der Umgebung ab.

Es gibt zwei Möglichkeiten, den Namen des Wochentags oder des Monats aus einem Datum als String in einer beliebigen Sprache zu ermitteln.

  • Ändern Sie das Gebietsschema mit dem Modul locale
  • Definieren Sie eine neue Funktion

Weitere Informationen zur grundlegenden Verwendung des datetime-Moduls und der Methoden strptime() und strftime() zur Konvertierung zwischen Datum und Uhrzeit (date, time) und Strings finden Sie in den folgenden Artikeln.

Gebietsschema mit Locale-Modul ändern

Die Python-Standardbibliothek bietet ein Locale-Modul zur Steuerung der Locale-Einstellungen.

Es hängt von der Umgebung ab, aber in der Beispielumgebung kann man mit dem folgenden Formatierungscode in der strftime()-Methode die Namen der Wochentage und Monate in englischer Notation erhalten.
%A, %a, %B, %b

Im folgenden Beispiel wird ein datetime-Objekt verwendet, um Datum und Uhrzeit darzustellen (Datum und Uhrzeit), aber dasselbe gilt auch für ein date-Objekt, das nur Datumsinformationen enthält.

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, die Einstellung der Gebietsschema-Kategorie für die Zeitformatierung, wird mit locale.getlocale() überprüft und auf None gesetzt. Dieses Ergebnis hängt von der Umgebung ab.

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

LC_TIME auf Japanisch (UTF-8) ja_JP.UTF-8 in locale.setlocale(), um die Tages- und Monatsnamen in Japanisch zu erhalten. locale.LC_ALL kann verwendet werden, um alle Gebietsschema-Kategorien zu setzen, aber beachten Sie, dass dies zum Beispiel LC_MONETARY beeinflusst.

Beachten Sie, dass diese Änderungen nur in diesem Code wirksam sind. Das bedeutet nicht, dass die Systemumgebungsvariablen umgeschrieben werden.

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

Sie können auch die Gebietsschemaeinstellungen ändern, um andere Sprachbezeichnungen zu verwenden, z. B. Englisch oder Deutsch.

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

Wenn Sie den Wochentag für ein bestimmtes Datum aus einer Datumszeichenkette in einer beliebigen Sprache ermitteln möchten, können Sie dies mit den folgenden Schritten tun.

  • LC_TIME auf den Wert der gewünschten Spracheinstellung (z.B. ja_JP.UTF-8) in locale.setlocale()
  • Umwandlung einer Zeichenkette in ein Datetime-Objekt mit strptime()
  • Rufen Sie strftime() für dieses datetime-Objekt mit dem folgenden Formatierungscode auf: %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)
# 月曜日

Definieren Sie eine neue Funktion

Dies kann durch die Definition einer neuen Funktion erreicht werden.

Die Methode weekday() des datetime-Objekts ergibt einen ganzzahligen Wert von 0 für Montag und 6 für Sonntag.

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

Es gibt eine ähnliche Methode, isoweekday(), die einen Integer-Wert von 1 für Montag und 7 für Sonntag zurückgibt. Es gibt jedoch einen kleinen Unterschied.

print(dt.isoweekday())
# 1

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

Wenn wir eine Liste der Namen der Wochentage für jede Sprachzeichenkette definieren und sie mit Hilfe der Ganzzahlwerte abrufen, die wir mit der Methode weekday() erhalten, können wir unser Ziel erreichen.