A hét vagy a hónap napjának kinyerése egy dátumból Pythonban sztringként (pl. német vagy angol)

Üzleti

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.

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.

Copied title and URL