"""Calculs de temps purs pour le MCP Alfred Autres (Python 3.11+).""" from datetime import datetime from os import environ from zoneinfo import ZoneInfo, ZoneInfoNotFoundError WEEKDAYS_FR = ( "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche" ) MONTHS_FR = ( "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" ) def get_current_datetime(timezone: str = "") -> dict[str, str | int]: """Obtient l'heure réelle de l'horloge système dans un fuseau IANA.""" selected = timezone.strip() if timezone else environ.get("ALFRED_TIMEZONE", "Europe/Paris") try: zone = ZoneInfo(selected) except (ZoneInfoNotFoundError, ValueError) as exc: raise ValueError(f"Fuseau horaire non reconnu : {selected!r}") from exc now = datetime.now(zone) offset = now.strftime("%z") return { "iso_datetime": now.isoformat(timespec="seconds"), "time_24h": now.strftime("%H:%M:%S"), "hour": now.hour, "minute": now.minute, "date_iso": now.date().isoformat(), "weekday_fr": WEEKDAYS_FR[now.weekday()], "date_fr": f"{WEEKDAYS_FR[now.weekday()]} {now.day} {MONTHS_FR[now.month - 1]} {now.year}", "timezone": selected, "utc_offset": (offset[:3] + ":" + offset[3:]) if offset else "", "timestamp_unix": int(now.timestamp()), }