Files
Home-Assistant/custom_components/ha_washdata/phase_assignment.py
T
2026-06-14 02:01:49 -04:00

51 lines
1.4 KiB
Python

"""Helpers for phase range assignment and timestamp conversion."""
from __future__ import annotations
from datetime import datetime
from homeassistant.util import dt as dt_util
def parse_phase_timestamp(value: str, cycle_start_dt: datetime) -> datetime | None:
"""Parse timestamp text used in phase assignment.
Supported formats:
- Full parseable datetime (via Home Assistant parser)
- YYYY-MM-DD HH:MM
- YYYY-MM-DD HH:MM:SS
- HH:MM (on cycle start date)
- HH:MM:SS (on cycle start date)
"""
text = str(value or "").strip()
if not text:
return None
parsed = dt_util.parse_datetime(text)
if parsed is not None:
if parsed.tzinfo is None:
parsed = parsed.replace(tzinfo=cycle_start_dt.tzinfo)
return parsed
for fmt in ("%Y-%m-%d %H:%M", "%Y-%m-%d %H:%M:%S"):
try:
dt_val = datetime.strptime(text, fmt)
return dt_val.replace(tzinfo=cycle_start_dt.tzinfo)
except ValueError:
continue
for fmt in ("%H:%M", "%H:%M:%S"):
try:
t_val = datetime.strptime(text, fmt)
base = dt_util.as_local(cycle_start_dt)
return base.replace(
hour=t_val.hour,
minute=t_val.minute,
second=t_val.second,
microsecond=0,
)
except ValueError:
continue
return None