Hent ugedagen eller måneden fra en dato i Python som en streng (f.eks. tysk eller engelsk)

Forretning

Ved hjælp af Pythons standardbibliotek datetime kan du oprette et datetime-objekt fra en datastreng og hente navnet på ugedagen eller måneden fra det som en streng. Sproget i disse strenge afhænger dog af omgivelsernes locale (land- eller regionsindstilling).

Her er to måder at få navnet på en ugedag eller måned fra en dato som en streng på et hvilket som helst sprog.

  • Ændre sprog med modulet locale
  • Definer en ny funktion

Du kan finde flere oplysninger om den grundlæggende brug af datetime-modulet og metoderne strptime() og strftime() til konvertering mellem dato og tid (dato, klokkeslæt) og strenge i følgende artikler.

Ændre sprog med sprogmodulet

Pythons standardbibliotek indeholder et locale-modul til at styre indstillingerne for sprogindstillingerne.

Det afhænger af miljøet, men i eksempelmiljøet kan man ved hjælp af følgende formateringskode i metoden strftime() få navnene på ugedagene og månederne i engelsk notation.
%A, %a, %B, %b

I det følgende eksempel bruges et datetime-objekt til at repræsentere dato og tid (dato og klokkeslæt), men det samme gælder for et date-objekt, der kun indeholder datooplysninger.

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, den lokale kategoriindstilling for tidsformatering, kontrolleres med locale.getlocale(), og den er sat til None. Dette resultat afhænger af miljøet.

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

LC_TIME til japansk (UTF-8) ja_JP.UTF-8 i locale.setlocale() for at få dag- og månedsnavnene på japansk. locale.LC_ALL kan bruges til at indstille alle lokale kategorier, men bemærk, at dette vil påvirke f.eks. LC_MONETARY, f.eks.

Bemærk, at disse ændringer kun gælder i denne kode. Det betyder ikke, at systemets miljøvariabler vil blive omskrevet.

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

Du kan også ændre indstillingerne for sprogindstillingerne for at bruge andre sprognotationer, f.eks. engelsk eller tysk.

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

Hvis du ønsker at få ugedagen for en given dato fra en datostreng på et hvilket som helst sprog, kan du gøre det ved at følge nedenstående trin.

  • LC_TIME til værdien af den ønskede sprogindstilling (f.eks. ja_JP.UTF-8) i locale.setlocale()
  • Konvertering af en streng til et datotidsobjekt med strptime()
  • Kald strftime() på dette datetime-objekt med følgende formateringskode: %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)
# 月曜日

Definer en ny funktion

Dette kan opnås ved at definere en ny funktion.

Metoden weekday() i datetime-objektet giver en heltalsværdi på 0 for mandag og 6 for søndag.

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

Der findes en lignende metode, isoweekday(), som returnerer en heltalsværdi på 1 for mandag og 7 for søndag. Bemærk, at der er en subtil forskel.

print(dt.isoweekday())
# 1

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

Hvis vi definerer en liste med navne på ugedagene for hver sprogstreng og henter dem ved hjælp af de heltalsværdier, der opnås ved hjælp af metoden weekday(), kan vi nå vores mål.

Copied title and URL