Files
saladeaula.digital/layercake/layercake/dateutils.py
2025-03-20 17:46:25 -03:00

50 lines
1.2 KiB
Python

import os
from datetime import datetime, timedelta
import pytz
TZ = os.getenv('TZ', 'UTC')
def now(tz: str = TZ) -> datetime:
"""Returns the current datetime in the specified timezone.
If no timezone is provided, returns the current datetime in the local timezone.
"""
return datetime.now(pytz.timezone(tz))
def ttl(
*,
start_dt: datetime | None = None,
tz: str = TZ,
**kwargs,
) -> int:
"""Calculates the timestamp for a datetime in the future.
If start_dt is not provided, it uses the current datetime.
Additional keyword arguments specify the timedelta to add.
"""
if not start_dt:
start_dt = now(tz)
dt = start_dt + timedelta(**kwargs)
return int(dt.timestamp())
def timestamp(dt: datetime) -> int:
"""Converts a datetime object to a Unix timestamp."""
return int(dt.timestamp())
def fromisoformat(dt: str) -> datetime | None:
"""Parses a datetime string in ISO 8601 format and returns a datetime object.
Returns None if the string is not in a valid ISO 8601 format.
"""
try:
date = datetime.fromisoformat(dt)
except ValueError:
return None
else:
return date