Source code for joule.utilities.time

import datetime
import dateparser


# --------- Utility functions from Jim Paris ------------


[docs] def time_now() -> int: """ :return: current time in UNIX microseconds """ return int(datetime.datetime.now().timestamp() * 1e6)
# Range min_timestamp = (-2 ** 63) max_timestamp = (2 ** 63 - 1)
[docs] def timestamp_to_human(timestamp: int) -> str: """Convert a timestamp (integer microseconds since epoch) to a human-readable string, using the local timezone for display (e.g. from the TZ env var).""" if timestamp == min_timestamp: return "(minimum)" if timestamp == max_timestamp: return "(maximum)" dt = datetime.datetime.fromtimestamp(timestamp_to_unix(timestamp)) return dt.strftime("%a, %d %b %Y %H:%M:%S %z")
[docs] def human_to_timestamp(time: str) -> int: """Convert a time specification into a UNIX microsecond timestamp. Time specification may be a wide variety of date formats, relative interval such as "one minute ago", or a numeric timestamp. Raises :exc:ValueError for invalid time specification""" try: return int(time) except ValueError: pass time = dateparser.parse(time) if time is None: raise ValueError return int(time.timestamp() * 1e6)
def unix_to_timestamp(unix): """Convert a Unix timestamp (floating point seconds since epoch) into a NILM timestamp (integer microseconds since epoch)""" return int(round(unix * 1e6)) def timestamp_to_datetime(timestamp: int): return datetime.datetime.utcfromtimestamp(timestamp / 1e6) def datetime_to_timestamp(date: datetime): return int(date.replace(tzinfo=datetime.timezone.utc).timestamp() * 1e6) seconds_to_timestamp = unix_to_timestamp def timestamp_to_unix(timestamp): """Convert a NILM timestamp (integer microseconds since epoch) into a Unix timestamp (floating point seconds since epoch)""" return timestamp / 1e6 timestamp_to_seconds = timestamp_to_unix