Koristeći Pythonovu standardnu biblioteku datetime, možete kreirati objekt datetime iz niza datuma i dobiti naziv dana u tjednu ili mjesecu iz njega kao niz. Međutim, jezik tih nizova ovisi o mjestu (postavci zemlje ili regije) okruženja.
Evo dva načina da dobijete naziv dana u tjednu ili mjesecu iz datuma kao niz na bilo kojem jeziku.
- Promijenite lokalizaciju s modulom lokalizacije
- Definirajte novu funkciju
Za više informacija o osnovnoj upotrebi modula datetime i metodama strptime() i strftime() za pretvorbu između datuma i vremena (datum, vrijeme) i nizova, pogledajte sljedeće članke.
- Povezani članci:Pretvaranje datuma i vremena u nizove i iz njih s Pythonovim datetime(
strftime
,strptime
)
Promijenite lokalizaciju s modulom lokalizacije
Standardna biblioteka Python pruža modul lokalizacije za kontrolu postavki jezika.
Ovisi o okruženju, ali u primjeru okruženja, korištenjem sljedećeg koda za formatiranje u metodi strftime(), nazivi dana u tjednu i mjeseci mogu se dobiti na engleskom jeziku.%A
,%a
,%B
,%b
Sljedeći primjer koristi objekt datetime za predstavljanje datuma i vremena (datum i vrijeme), ali isto vrijedi i za objekt datuma koji ima samo podatke o datumu.
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, postavka kategorije jezika za formatiranje vremena, provjerava se s locale.getlocale() i postavljena je na Ništa. Ovaj rezultat ovisi o okolišu.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME na japanski (UTF-8) ja_JP.UTF-8 u locale.setlocale() da biste dobili nazive dana i mjeseca na japanskom. locale.LC_ALL može se koristiti za postavljanje svih kategorija jezika, ali imajte na umu da će to utjecati na, na primjer, LC_MONETARY.
Imajte na umu da su ove promjene učinkovite samo u ovom kodu. To ne znači da će varijable okruženja sustava biti prepisane.
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
Također možete promijeniti postavke jezika za korištenje drugih jezičnih oznaka, kao što su engleski ili njemački.
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
Ako želite dobiti dan u tjednu za određeni datum iz niza datuma na bilo kojem jeziku, to možete učiniti slijedeći korake u nastavku.
- LC_TIME na vrijednost željene postavke jezika (npr. ja_JP.UTF-8) u locale.setlocale()
- Pretvaranje niza u objekt datuma i vremena pomoću strptime()
- Pozovite strftime() na tom objektu datetime sa sljedećim kodom za oblikovanje:
%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)
# 月曜日
Definirajte novu funkciju
To se može postići definiranjem nove funkcije.
Metoda weekday() objekta datetime daje cjelobrojnu vrijednost 0 za ponedjeljak i 6 za nedjelju.
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'>
Postoji slična metoda, isoweekday(), koja vraća cjelobrojnu vrijednost 1 za ponedjeljak i 7 za nedjelju. Imajte na umu da postoji suptilna razlika.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Ako definiramo popis naziva dana u tjednu za svaki jezični niz i dohvatimo ih pomoću cjelobrojnih vrijednosti dobivenih metodom weekday(), možemo postići svoj cilj.