Získanie dňa v týždni alebo mesiaci z dátumu v jazyku Python ako reťazec (napr. nemecký alebo anglický)

obchodné

Pomocou štandardnej knižnice datetime jazyka Python môžete vytvoriť objekt datetime z reťazca dátumu a získať z neho názov dňa v týždni alebo mesiaca ako reťazec. Jazyk týchto reťazcov však závisí od locale (nastavenia krajiny alebo regiónu) prostredia.

Tu sú dva spôsoby, ako získať názov dňa v týždni alebo mesiaci z dátumu ako reťazec v ľubovoľnom jazyku.

  • Zmena lokálneho jazyka pomocou modulu locale
  • Definovanie novej funkcie

Ďalšie informácie o základnom použití modulu datetime a metód strptime() a strftime() na prevod medzi dátumom a časom (dátum, čas) a reťazcami nájdete v nasledujúcich článkoch.

Zmena lokálneho jazyka pomocou modulu locale

Štandardná knižnica Pythonu poskytuje modul locale na ovládanie nastavení locale.

Závisí to od prostredia, ale v príkladovom prostredí možno pomocou nasledujúceho formátovacieho kódu v metóde strftime() získať názvy dní v týždni a mesiacov v anglickom zápise.
%A, %a, %B, %b

Nasledujúci príklad používa objekt datetime na reprezentáciu dátumu a času (dátum a čas), ale to isté platí aj pre objekt date, ktorý obsahuje iba informácie o dátume.

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, nastavenie kategórie locale pre formátovanie času, sa kontroluje pomocou locale.getlocale() a je nastavené na hodnotu None. Tento výsledok závisí od prostredia.

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

LC_TIME na japonský (UTF-8) ja_JP.UTF-8 v locale.setlocale() na získanie názvov dní a mesiacov v japončine. locale.LC_ALL možno použiť na nastavenie všetkých kategórií locale, ale upozorňujeme, že to ovplyvní napríklad LC_MONETARY, napr.

Upozorňujeme, že tieto zmeny sú účinné len v tomto kóde. Neznamená to, že sa prepíšu systémové premenné prostredia.

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

Nastavenia lokality môžete zmeniť aj na používanie iných jazykových zápisov, napríklad angličtiny alebo nemčiny.

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

Ak chcete získať deň v týždni pre daný dátum z reťazca dátumu v ľubovoľnom jazyku, môžete to urobiť podľa nasledujúcich krokov.

  • LC_TIME na hodnotu požadovaného nastavenia jazyka (napr. ja_JP.UTF-8) v locale.setlocale()
  • Konverzia reťazca na objekt s dátumom pomocou funkcie strptime()
  • Volajte strftime() na tento datetime objekt s nasledujúcim formátovacím kódom: %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)
# 月曜日

Definovanie novej funkcie

To sa dá dosiahnuť definovaním novej funkcie.

Metóda weekday() objektu datetime poskytuje celočíselnú hodnotu 0 pre pondelok a 6 pre nedeľu.

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

Existuje podobná metóda isoweekday(), ktorá vracia celočíselnú hodnotu 1 pre pondelok a 7 pre nedeľu. Všimnite si, že je tu jemný rozdiel.

print(dt.isoweekday())
# 1

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

Ak definujeme zoznam názvov dní v týždni pre každý jazykový reťazec a načítame ich pomocou celočíselných hodnôt získaných metódou weekday(), môžeme dosiahnuť náš cieľ.

Copied title and URL