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.
- Aiheeseen liittyvät artikkelit:Päivämäärien ja kellonaikojen muuntaminen merkkijonoiksi ja merkkijonoista Pythonin datetime-ohjelmalla(
strftime
,strptime
)
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.