Files

38 lines
1.4 KiB
Python

"""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()),
}