Source code for tracktable.core.simple_timezone

#
# Copyright (c) 2014-2021 National Technology and Engineering
# Solutions of Sandia, LLC. Under the terms of Contract DE-NA0003525
# with National Technology and Engineering Solutions of Sandia, LLC,
# the U.S. Government retains certain rights in this software.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""
simple_timezone - Timezone struct based on UTC offset
"""

from datetime import tzinfo, timedelta, datetime

ZERO = timedelta(0)
ONE_HOUR = timedelta(hours=1)

[docs]class SimpleTimeZone(tzinfo): """Trivial time zone struct for use with datetime. We use this when we don't need the full power of the pytz package. Attributes: offset (datetime.timedelta): Offset from UTC name (str): Human-readable name for timezone """ def __init__(self, hours=0, minutes=0, name='UTC'): """Initialize a timezone to UTC. Keyword Args: hours (integer): Hours away from UTC (Default: 0) minutes (integer): Minutes to add to the hours (Default: 0) name (str): Human-readable name for time zone (Default: 'UTC') """ self.offset = timedelta(hours=hours, minutes=minutes) self.name = name def __repr__(self): """Return machine-parseable representation of time zone""" return '<SimpleTimeZone: {}, offset {}>'.format(self._name, self._offset)
[docs] def utcoffset(self, dt): """Return offset from UTC This method is required by the Python datetime library in order to create 'aware' datetime objects. Args: dt (datetime.timedelta): Not used """ return timedelta(minutes=self.offset.total_seconds() / 60)
[docs] def localize(self, timestamp): """Convert a datetime into an 'aware' datetime object by replacing its time zone Args: timestamp (datetime.datetime): Timestamp object to make aware Returns: New datetime.datetime object with this timezone attached """ return timestamp.replace(tzinfo=self)
[docs] def dst(self, dt): """Return daylight savings time offset Since we don't support daylight savings time in SimpleTimeZone this is always zero. Args: dt (datetime.datetime): Timestamp to check for DST Returns: Zero time offset """ return ZERO