Minden programozó életében eljön a pillanat, amikor egy Excel-táblát vagy adatbázist kell feldolgoznia, és szembesül a dátumok káoszával. Az egyik cellában „2025.01.27”, a másikban „Jan 27, 2025”, a harmadikban csak egy Unix időbélyeg van. A beépített Python könyvtárak jók, de néha túl bonyolultak az egyszerű feladatokhoz. Miért írnád le ugyanazt a három sort százszor, ha megírhatod egyszer?
A Python datetime modulja erős, de nem mindig felhasználóbarát. Sokan elkövetik azt a hibát, hogy minden egyes szkriptben újra feltalálják a spanyolviaszt a dátumok átalakítására. Ez nemcsak időpazarlás, de növeli a hibák kockázatát is.
Összegyűjtöttük azt az 5 „csináld magad” segédfüggvényt, amit a mivagyunk.hu fejlesztői is nap mint nap használnak. Másold ki őket, mentsd el egy utils.py fájlba, és használd őket bármikor.
1. A „bármit megeszek” dátumolvasó
Az adatok sosem tiszták. Néha kötőjellel, néha perjelöléssel jönnek a dátumok. Ez a függvény rugalmasan kezeli a leggyakoribb formátumokat, és nem omlik össze, ha váratlan formátumot kap.
from datetime import datetime
def parse_date_flexible(date_string):
"""
Megpróbálja értelmezni a dátumot többféle formátum alapján.
Ha egyik sem sikerül, None értéket ad vissza hiba helyett.
"""
formats = [
"%Y-%m-%d", # 2025-01-27
"%d/%m/%Y", # 27/01/2025
"%m/%d/%Y", # 01/27/2025 (amerikai)
"%Y.%m.%d.", # 2025.01.27. (magyar)
"%b %d, %Y", # Jan 27, 2025
]
for fmt in formats:
try:
return datetime.strptime(date_string, fmt)
except ValueError:
continue
print(f"Hiba: Nem sikerült értelmezni ezt a dátumot: {date_string}")
return None
# Használat
print(parse_date_flexible("2025.01.27."))
print(parse_date_flexible("27/01/2025"))
2. Munkanap vagy hétvége?
Gyakori üzleti igény, hogy csak munkanapokra kell jelentést futtatni, vagy ki kell számolni a szállítási határidőt hétvégék nélkül. Ez a függvény egyetlen sorban megmondja az igazat.
def is_workday(date_obj):
"""
Igaz (True) értéket ad vissza, ha a dátum hétfő és péntek közé esik.
Hamis (False), ha szombat vagy vasárnap.
"""
# A weekday() metódus 0-tól (hétfő) 6-ig (vasárnap) számoz
return date_obj.weekday() < 5
# Használat
datum = datetime(2025, 1, 27) # Hétfő
if is_workday(datum):
print("Ma dolgozni kell!")
else:
print("Irány a telek!")
3. Emberi nyelvre fordítás, a relatív idő
A felhasználók nem azt akarják látni, hogy „2025-01-27 14:30:00”, hanem azt, hogy „2 órája” vagy „tegnap”. Ez a függvény barátságossá teszi az időbélyegeket.
from datetime import timedelta
def time_ago(date_obj):
"""
Visszaadja, mennyi ideje történt az esemény szövegesen.
"""
now = datetime.now()
diff = now - date_obj
seconds = diff.total_seconds()
minutes = seconds / 60
hours = minutes / 60
days = diff.days
if seconds < 60:
return "épp most"
elif minutes < 60:
return f"{int(minutes)} perce"
elif hours < 24:
return f"{int(hours)} órája"
elif days == 1:
return "tegnap"
else:
return f"{days} napja"
# Használat
regebbi_datum = datetime.now() - timedelta(hours=3)
print(time_ago(regebbi_datum)) # Kimenet: 3 órája
4. Negyedévek kezelése, üzleti elemzéshez
A pénzügyi jelentésekben gyakran kell negyedévekre (Q1, Q2, stb.) bontani az adatokat. A Pythonnak nincs erre beépített parancsa, de matekkal könnyen megoldható.
def get_quarter(date_obj):
"""
Visszaadja a dátumhoz tartozó negyedévet (pl. '2025 Q1').
"""
quarter = (date_obj.month - 1) // 3 + 1
return f"{date_obj.year} Q{quarter}"
# Használat
datum = datetime(2025, 10, 5)
print(get_quarter(datum)) # Kimenet: 2025 Q4
5. Dátum tartomány generátor, iterálás
Sokszor kell végigmenni egy időszakon napról napra (pl. grafikont rajzolni az elmúlt 30 napról). Ez a generátor függvény elegáns megoldást kínál a for ciklusokhoz.
def date_range(start_date, end_date):
"""
Végigiterál a két dátum közötti napokon.
"""
current_date = start_date
while current_date <= end_date:
yield current_date
current_date += timedelta(days=1)
# Használat
start = datetime(2025, 1, 1)
end = datetime(2025, 1, 5)
print("Január első napjai:")
for day in date_range(start, end):
print(day.strftime("%Y-%m-%d"))
Építsd fel a saját könyvtáradat!
Ne írd meg ugyanazt a kódot kétszer. Ha találsz egy hasznos logikát, csomagold be egy függvénybe, lásd el dokumentációval, és tedd el későbbre. Ezek az apró építőkockák teszik a kezdő szkriptelőt profi fejlesztővé.




