Source code for aiida.common.timezone

###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida-core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Utility functions to operate on datetime objects."""

from datetime import datetime, timedelta, timezone, tzinfo
from typing import Optional

utc = timezone.utc  # Simply forward this attribute from the :mod:`datetime.timezone` built in library


[docs] def now() -> datetime: """Return the datetime object of the current time. :return: datetime object represeting current time """ return datetime.now().astimezone()
[docs] def make_aware(value: datetime, tz: Optional[tzinfo] = None) -> datetime: """Make the given datetime object timezone aware. :param value: The datetime object to make aware. :param tz: The timezone to set. If not defined the system local timezone is assumed for the target timezone. :return: A timezone aware datetime object. """ return value.astimezone(tz)
[docs] def localtime(value: datetime) -> datetime: """Make a :class:`datetime.datetime` object timezone aware with the local timezone. :param value: The datetime object to make aware. :return: A timezone aware datetime object with the timezone set to that of the operating system. """ return make_aware(value)
[docs] def timezone_from_name(name: str) -> tzinfo: """Return a :class:`datetime.tzinfo` instance corresponding to the given timezone name. :param name: The timezone name. Should correspond to a known name in the Olsen database. https://en.wikipedia.org/wiki/Tz_database :returns: The corresponding timezone object. :raises ValueError: if the timezone name is unknown. """ import pytz try: return pytz.timezone(name) except pytz.exceptions.UnknownTimeZoneError as exception: raise ValueError(f'unknown timezone: {name}') from exception
[docs] def delta(from_time: datetime, to_time: Optional[datetime] = None) -> timedelta: """Return the datetime object representing the different between two datetime objects. :param from_time: The starting datetime object. :param to_time: The end datetime object. If not specified :func:`aiida.common.timezone.now` is used. :return: The delta datetime object. """ return make_aware(to_time or now()) - make_aware(from_time)