pif / app /timeutils.py
pramodmisra's picture
Display all timestamps in Eastern time (EST/EDT)
76b303c
Raw
History Blame Contribute Delete
1.24 kB
"""Display-side time helpers.
Timestamps are STORED in UTC (see models.py / route writes — do not change that).
These helpers exist only to render UTC values in Eastern time (America/New_York,
which automatically handles EST vs EDT) for human-facing output: web UI, PDF, DOCX.
"""
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
EASTERN = ZoneInfo("America/New_York")
# Default display format used across the portal (e.g. "06/25/2026 02:00 PM").
DEFAULT_FMT = "%m/%d/%Y %I:%M %p"
def to_eastern(dt: datetime | None) -> datetime | None:
"""Convert a stored UTC datetime to Eastern. Naive values are assumed UTC."""
if dt is None:
return None
if dt.tzinfo is None: # legacy naive rows were written as UTC
dt = dt.replace(tzinfo=timezone.utc)
return dt.astimezone(EASTERN)
def fmt_eastern(dt: datetime | None, fmt: str = DEFAULT_FMT, default: str = "—") -> str:
"""Format a stored UTC datetime in Eastern time, or return `default` if None."""
eastern = to_eastern(dt)
return eastern.strftime(fmt) if eastern else default
def now_eastern() -> datetime:
"""Current time in Eastern (for 'generated on' / 'submitted on' footers)."""
return datetime.now(EASTERN)