Hae viikonpäivä tai kuukausi Python-päivämäärästä merkkijonona (esim. saksaksi tai englanniksi).

liiketoiminta

Pythonin standardikirjaston datetime avulla voit luoda datetime-olion päiväysmerkkijonosta ja saada siitä viikonpäivän tai kuukauden nimen merkkijonona. Näiden merkkijonojen kieli riippuu kuitenkin ympäristön lokaalista (maa- tai alueasetuksista).

Tässä on kaksi tapaa saada viikonpäivän tai kuukauden nimi päivämäärästä merkkijonona millä tahansa kielellä.

  • Vaihda kielialue locale-moduulin avulla
  • Määritä uusi funktio

Lisätietoja datetime-moduulin peruskäytöstä ja metodeista strptime() ja strftime() päivämäärän ja ajan (date, time) ja merkkijonojen väliseen muuntamiseen on seuraavissa artikkeleissa.

Vaihda lokaliteetti lokaliteettimoduulilla

Pythonin standardikirjasto tarjoaa locale-moduulin, jolla voidaan hallita locale-asetuksia.

Se riippuu ympäristöstä, mutta esimerkkiympäristössä käyttämällä seuraavaa muotoilukoodia strftime()-metodissa saadaan viikonpäivien ja kuukausien nimet englanninkielisellä merkintätavalla.
%A, %a, %B, %b

Seuraavassa esimerkissä käytetään datetime-objektia esittämään päivämäärää ja kellonaikaa (date and time), mutta sama pätee myös date-objektiin, jossa on vain päivämäärätietoja.

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, aikamuodostuksen lokaluokka-asetus, tarkistetaan locale.getlocale():lla, ja sen arvoksi asetetaan None. Tämä tulos riippuu ympäristöstä.

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

LC_TIME japaniksi (UTF-8) ja_JP.UTF-8 in locale.setlocale() saadaksesi päivän ja kuukauden nimet japaniksi. locale.LC_ALL voidaan käyttää kaikkien lokaluokkien asettamiseen, mutta huomaa, että tämä vaikuttaa esimerkiksi LC_MONETARY:hen.

Huomaa, että nämä muutokset ovat voimassa vain tässä koodissa. Se ei tarkoita, että järjestelmän ympäristömuuttujat kirjoitetaan uudelleen.

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

Voit myös muuttaa alueasetuksia ja käyttää muita kielimerkintöjä, kuten englantia tai saksaa.

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

Jos haluat saada tietyn päivämäärän viikonpäivän millä tahansa kielellä olevasta päivämäärämerkkijonosta, voit tehdä sen noudattamalla seuraavia ohjeita.

  • LC_TIME halutun kieliasetuksen arvoon (esim. ja_JP.UTF-8) kohdassa locale.setlocale()
  • Merkkijonon muuntaminen datetime-olioksi strptime():n avulla
  • Kutsu strftime() kyseiseen datetime-objektiin seuraavalla muotoilukoodilla.: %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)
# 月曜日

Määritä uusi funktio

Tämä voidaan toteuttaa määrittelemällä uusi funktio.

Datetime-olion metodi weekday() antaa kokonaislukuarvon 0 maanantaille ja 6 sunnuntaille.

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

On olemassa samanlainen metodi isoweekday(), joka palauttaa kokonaislukuarvon 1 maanantaille ja 7 sunnuntaille. Huomaa, että on olemassa hienoinen ero.

print(dt.isoweekday())
# 1

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

Jos määrittelemme luettelon viikonpäivien nimistä kullekin kielijonolle ja haemme ne käyttämällä weekday()-metodilla saatuja kokonaislukuarvoja, voimme saavuttaa tavoitteemme.