add layercake
This commit is contained in:
49
layercake/layercake/dateutils.py
Normal file
49
layercake/layercake/dateutils.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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
|
||||
Reference in New Issue
Block a user