A Python szabványos könyvtárának datetime segítségével létrehozhatunk egy datetime objektumot egy dátumsorozatból, és ebből stringként megkaphatjuk a hét napjának vagy hónapjának nevét. Ezeknek a karakterláncoknak a nyelve azonban a környezet locale (ország- vagy régióbeállítás) nyelvétől függ.
Az alábbiakban kétféleképpen kaphatjuk meg a hét napjának vagy a hónapnak a nevét egy dátumból, bármilyen nyelven.
- A nyelvterület módosítása a locale modullal
- Új függvény definiálása
A datetime modul alapvető használatáról és a strptime() és strftime() metódusokról a dátum és idő (dátum, idő) és a karakterláncok közötti konvertáláshoz további információkat a következő cikkekben találsz.
- Kapcsolódó cikkek:Dátumok és időpontok konvertálása karakterláncokba és karakterláncokból a Python datetime programmal(
strftime
,strptime
)
Helyszínváltoztatás a locale modullal
A Python szabványos könyvtára egy locale modult biztosít a nyelvi beállítások vezérlésére.
Ez a környezettől függ, de a példakörnyezetben a strftime() metódusban a következő formázási kódot használva a hét napjainak és a hónapoknak a nevét angol jelöléssel kaphatjuk meg.%A
, %a
, %B
, %b
A következő példa egy datetime objektumot használ a dátum és az idő (dátum és idő) megjelenítésére, de ugyanez igaz egy olyan date objektumra is, amely csak dátuminformációt tartalmaz.
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
Az LC_TIME, az időformázásra vonatkozó helyi kategória beállítását a locale.getlocale() ellenőrzi, és None értékre van állítva. Ez az eredmény a környezettől függ.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME japánra (UTF-8) ja_JP.UTF-8 a locale.setlocale()-ban, hogy a nap és a hónap nevét japánul kapja meg. locale.LC_ALL használható az összes locale kategória beállításához, de vegye figyelembe, hogy ez hatással lesz például az LC_MONETARY-ra.
Vegye figyelembe, hogy ezek a változások csak ebben a kódban érvényesek. Ez nem jelenti azt, hogy a rendszerkörnyezeti változókat is átírják.
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
A helyi beállítások megváltoztatásával más nyelvi jelöléseket is használhat, például angolt vagy németet.
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
Ha egy adott dátumhoz tartozó hét napját szeretné megtudni egy tetszőleges nyelvű dátumsorozatból, az alábbi lépéseket követve megteheti.
- LC_TIME a kívánt nyelvi beállítás értékére (pl. ja_JP.UTF-8) a locale.setlocale() parancsban
- Egy karakterlánc átalakítása dátumidő objektummá a strptime() segítségével
- Hívja meg a strftime() funkciót a datetime objektumon a következő formázási kóddal:
%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)
# 月曜日
Új függvény definiálása
Ez egy új függvény definiálásával érhető el.
A datetime objektum weekday() metódusa a hétfőre 0, a vasárnapra 6 egész értéket ad.
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'>
Létezik egy hasonló metódus, az isoweekday(), amely a hétfőre 1, a vasárnapra 7 egész értéket ad vissza. Vegyük észre, hogy van egy finom különbség.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Ha minden nyelvi karakterlánchoz definiálunk egy listát a hét napjainak neveivel, és a weekday() metódus által kapott egész számértékek segítségével lekérdezzük őket, elérhetjük a célunkat.