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.
- Relaterede artikler:Konvertering af datoer og tidspunkter til og fra strenge med Pythons datetime(
strftime
,strptime
)
Æ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.