Pythoni standardraamatukogu datetime abil saab kuupäevast stringist luua datetime-objekti ja saada sellest stringina nädalapäeva või kuu nime. Nende stringide keel sõltub aga keskkonna lokaalist (riigi või piirkonna seadistus).
Siin on kaks võimalust, kuidas saada nädalapäeva või kuu nimi kuupäevast stringina mis tahes keeles.
- Kohaliku keele muutmine locale'i mooduliga
- Määrake uus funktsioon
Lisateavet datetime-mooduli ja meetodite strptime() ja strftime() põhilise kasutamise kohta kuupäevade ja kellaaegade (kuupäev, kellaaeg) ning stringide vaheliseks teisendamiseks leiate järgmistest artiklitest.
- Seotud artiklid:Kuupäevade ja kellaaegade teisendamine stringideks ja stringidest Pythoni datetime'iga(
strftime
,strptime
)
Lokaali muutmine lokaalimooduliga
Pythoni standardraamatukogus on olemas lokaalimoodul, mille abil saab kontrollida lokaalide seadistusi.
See sõltub keskkonnast, kuid näidiskeskkonnas, kasutades meetodis strftime() järgmist vormindamiskoodi, saab nädalapäevade ja kuude nimed in ingliskeelses märkimisviisis.%A
, %a
, %B
, %b
Järgnevas näites kasutatakse datetime-objekti kuupäeva ja kellaaja (kuupäev ja kellaaeg) esitamiseks, kuid sama kehtib ka kuupäevaobjekti kohta, mis sisaldab ainult kuupäeva teavet.
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, aja vormindamise lokaalkategooria seade, kontrollitakse locale.getlocale() abil ja see on määratud olematuks. See tulemus sõltub keskkonnast.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME jaapani keelele (UTF-8) ja_JP.UTF-8 in locale.setlocale(), et saada päeva ja kuu nimed jaapani keeles. locale.LC_ALL võib kasutada kõigi lokaalide kategooriate määramiseks, kuid pange tähele, et see mõjutab näiteks LC_MONETARY, näiteks.
Pange tähele, et need muudatused kehtivad ainult selles koodis. See ei tähenda, et süsteemi keskkonnamuutujad kirjutatakse ümber.
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
Saate muuta ka asukohasätteid, et kasutada muid keelemärkusi, näiteks inglise või saksa keelt.
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
Kui soovite saada antud kuupäeva jaoks nädalapäeva mis tahes keeles olevast kuupäevast, saate seda teha, järgides alljärgnevaid samme.
- LC_TIME soovitud keeleseadistuse (nt ja_JP.UTF-8) väärtusele locale.setlocale()
- Stringi teisendamine datetime objektiks strptime() abil
- Kutsu strftime() sellele datetime-objektile järgmise vormindamiskoodiga:
%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äärake uus funktsioon
Seda saab saavutada uue funktsiooni määratlemisega.
Datetime-objekti meetod weekday() annab esmaspäeva jaoks täisarvulise väärtuse 0 ja pühapäeva jaoks 6.
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 olemas sarnane meetod isoweekday(), mis tagastab täisarvulise väärtuse 1 esmaspäeva ja 7 pühapäeva kohta. Pange tähele, et on väike erinevus.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Kui me määratleme iga keelestringi jaoks nädalapäevade nimede nimekirja ja hangime need meetodi weekday() abil saadud täisarvuliste väärtuste abil, saavutame oma eesmärgi.