S standardno knjižnico datetime v Pythonu lahko iz datumskega niza ustvarite objekt datetime in iz njega kot niz dobite ime dneva v tednu ali mesecu. Vendar pa je jezik teh nizov odvisen od lokalnega okolja (nastavitev države ali regije).
Tukaj sta dva načina za pridobitev imena dneva v tednu ali mesecu iz datuma kot niza v katerem koli jeziku.
- Spreminjanje lokalnega jezika z modulom locale
- Opredelitev nove funkcije
Za več informacij o osnovni uporabi modula datetime ter metod strptime() in strftime() za pretvorbo med datumom in časom (date, time) ter nizi glejte naslednje članke.
- Povezani članki:Pretvarjanje datumov in časov v in iz nizov s Pythonovo funkcijo datetime(
strftime
,strptime
)
Spreminjanje lokalnega jezika z modulom locale
Standardna knjižnica Python zagotavlja modul locale za nadzor nastavitev lokalnega jezika.
To je odvisno od okolja, vendar lahko v primernem okolju z uporabo naslednje kode za oblikovanje v metodi strftime() dobimo imena dni v tednu in mesecev v angleškem zapisu.%A
, %a
, %B
, %b
Naslednji primer uporablja objekt datetime za predstavitev datuma in časa (datum in čas), enako pa velja tudi za objekt date, ki vsebuje 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, nastavitev kategorije locale za oblikovanje časa, se preveri s funkcijo locale.getlocale() in je nastavljena na None. Ta rezultat je odvisen od okolja.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME v japonščino (UTF-8) ja_JP.UTF-8 v locale.setlocale() za pridobitev imen dneva in meseca v japonščini. locale.LC_ALL lahko uporabite za nastavitev vseh kategorij lokala, vendar upoštevajte, da bo to vplivalo npr. na LC_MONETARY, npr.
Upoštevajte, da te spremembe veljajo samo v tej kodi. To ne pomeni, da bodo spremenljivke sistemskega okolja napisane na novo.
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
Nastavitve lokalnega okolja lahko spremenite tudi tako, da uporabite druge jezikovne zapise, na primer angleščino ali nemščino.
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
Če želite iz datumskega niza v katerem koli jeziku pridobiti dan v tednu za določen datum, lahko to storite po naslednjih korakih.
- LC_TIME na vrednost želene jezikovne nastavitve (npr. ja_JP.UTF-8) v locale.setlocale()
- Pretvarjanje niza v objekt z datumom s funkcijo strptime()
- Pokličite funkcijo strftime() za objekt datetime z naslednjo kodo 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)
# 月曜日
Opredelitev nove funkcije
To je mogoče doseči z opredelitvijo nove funkcije.
Metoda weekday() objekta datetime poda celoštevilsko vrednost 0 za ponedeljek in 6 za nedeljo.
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'>
Obstaja podobna metoda isoweekday(), ki vrne celoštevilsko vrednost 1 za ponedeljek in 7 za nedeljo. Upoštevajte, da je tu majhna razlika.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Če za vsak jezikovni niz določimo seznam imen dni v tednu in jih pridobimo s celoštevilskimi vrednostmi, pridobljenimi z metodo weekday(), lahko dosežemo svoj cilj.