Egy Python kódot láthatunk a képen, ami a dátumkezelést oldja meg.

5 Python függvény dátumkezelésre

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é.

Kérjük, ellenőrizd a mező formátumát, és próbáld újra.
Köszönjük, hogy feliratkoztál.

vagyunk.hu hírlevél

Hozzászólás

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük