Home Assistant Unofficial Reference 2024.12.1
time.py
Go to the documentation of this file.
1 """Models for Recorder."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime
6 import logging
7 from typing import overload
8 
9 import homeassistant.util.dt as dt_util
10 
11 _LOGGER = logging.getLogger(__name__)
12 
13 DB_TIMEZONE = "+00:00"
14 
15 EMPTY_JSON_OBJECT = "{}"
16 
17 
18 @overload
19 def process_timestamp(ts: None) -> None: ...
20 
21 
22 @overload
23 def process_timestamp(ts: datetime) -> datetime: ...
24 
25 
26 def process_timestamp(ts: datetime | None) -> datetime | None:
27  """Process a timestamp into datetime object."""
28  if ts is None:
29  return None
30  if ts.tzinfo is None:
31  return ts.replace(tzinfo=dt_util.UTC)
32 
33  return dt_util.as_utc(ts)
34 
35 
36 @overload
37 def process_timestamp_to_utc_isoformat(ts: None) -> None: ...
38 
39 
40 @overload
41 def process_timestamp_to_utc_isoformat(ts: datetime) -> str: ...
42 
43 
44 def process_timestamp_to_utc_isoformat(ts: datetime | None) -> str | None:
45  """Process a timestamp into UTC isotime."""
46  if ts is None:
47  return None
48  if ts.tzinfo == dt_util.UTC:
49  return ts.isoformat()
50  if ts.tzinfo is None:
51  return f"{ts.isoformat()}{DB_TIMEZONE}"
52  return ts.astimezone(dt_util.UTC).isoformat()
53 
54 
55 def datetime_to_timestamp_or_none(dt: datetime | None) -> float | None:
56  """Convert a datetime to a timestamp."""
57  return None if dt is None else dt.timestamp()
58 
59 
60 def timestamp_to_datetime_or_none(ts: float | None) -> datetime | None:
61  """Convert a timestamp to a datetime."""
62  if not ts:
63  return None
64  return dt_util.utc_from_timestamp(ts)
datetime|None timestamp_to_datetime_or_none(float|None ts)
Definition: time.py:60
None process_timestamp_to_utc_isoformat(None ts)
Definition: time.py:37
float|None datetime_to_timestamp_or_none(datetime|None dt)
Definition: time.py:55