38 lines
1.4 KiB
Python
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()),
|
|
}
|