Source code for aside.boilerplate.timeutils

"""Implements human-readable datetime tools."""

from datetime import datetime
from typing import Dict, Optional

from arrow import Arrow
from dateparser import parse

__all__ = [
    "relative_to_absolute",
    "absolute_to_relative",
]


dateparser_settings: Dict = dict(
    RETURN_AS_TIMEZONE_AWARE=True,
    DATE_ORDER="DMY",
    PREFER_DAY_OF_MONTH="first",
    PREFER_DATES_FROM="future",
    PARSERS=["relative-time", "absolute-time"],
)


[docs]def relative_to_absolute(relative: str) -> Optional[datetime]: """Try to convert a relative time string like ``in 1 hour`` to a ``datetime``.""" return parse( relative, settings=dateparser_settings, )
[docs]def absolute_to_relative(absolute: datetime) -> str: """Convert a ``datetime`` to a relative time string.""" return Arrow.fromdatetime(absolute).humanize()