Hämta veckodagen eller månaden från ett datum i Python som en sträng (t.ex. tyska eller engelska).

Företag

Med hjälp av Pythons standardbibliotek datetime kan du skapa ett datetime-objekt från en datumsträng och hämta namnet på veckodagen eller månaden som en sträng. Språket i dessa strängar beror dock på miljöns locale (land- eller regioninställning).

Här är två sätt att få fram namnet på veckodagen eller månaden från ett datum som en sträng på vilket språk som helst.

  • Ändra språket med modulen locale
  • Definiera en ny funktion

Mer information om den grundläggande användningen av datetime-modulen och metoderna strptime() och strftime() för konvertering mellan datum och tid (datum, tid) och strängar finns i följande artiklar.

Ändra språket med modulen för språket

Pythons standardbibliotek innehåller en locale-modul för att kontrollera lokalinställningarna.

Det beror på miljön, men i exempelmiljön kan namnen på veckodagarna och månaderna fås i engelsk notation genom att använda följande formateringskod i metoden strftime().
%A, %a, %B, %b

I följande exempel används ett datetime-objekt för att representera datum och tid (datum och tid), men samma sak gäller för ett date-objekt som endast innehåller datuminformation.

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 lokala kategorin för tidsformatering, kontrolleras med locale.getlocale() och är satt till None. Resultatet beror på miljön.

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

LC_TIME till japanska (UTF-8) ja_JP.UTF-8 i locale.setlocale() för att få fram namnen på dag och månad på japanska. locale.LC_ALL kan användas för att ställa in alla lokalkategorier, men observera att detta påverkar till exempel LC_MONETARY, till exempel.

Observera att dessa ändringar endast gäller för denna kod. Det betyder inte att systemets miljövariabler kommer att skrivas om.

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 också ändra lokalinställningarna för att använda andra språkbeteckningar, t.ex. engelska eller tyska.

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

Om du vill få fram veckodagen för ett visst datum från en datumsträng på vilket språk som helst kan du göra det genom att följa nedanstående steg.

  • LC_TIME till värdet för den önskade språkinställningen (t.ex. ja_JP.UTF-8) i locale.setlocale()
  • Konvertera en sträng till ett datumobjekt med strptime()
  • Kalla strftime() på detta datetime-objekt med följande formateringskod: %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)
# 月曜日

Definiera en ny funktion

Detta kan uppnås genom att definiera en ny funktion.

Metoden weekday() för datetime-objektet ger ett heltalsvärde på 0 för måndag och 6 för 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'>

Det finns en liknande metod, isoweekday(), som returnerar ett heltalsvärde på 1 för måndag och 7 för söndag. Observera att det finns en subtil skillnad.

print(dt.isoweekday())
# 1

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

Om vi definierar en lista med namn på veckodagarna för varje språksträng och hämtar dem med hjälp av de heltalsvärden som erhålls med metoden weekday() kan vi nå vårt mål.

Copied title and URL