Source code for cerebralcortex.core.util.datetime_helper_methods

# Copyright (c) 2019, MD2K Center of Excellence
# - Nasir Ali <nasir.ali08@gmail.com>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * 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.

import datetime as dt

import pytz


[docs]def get_timezone(tz_offset:float, common_only:bool=False): """ Returns a timezone for a given offset in milliseconds Args: tz_offset (float): in milliseconds common_only (bool): Returns: str: timezone of an offset """ if tz_offset is None or tz_offset=="": raise ValueError("Offset cannot be None or empty.") # pick one of the timezone collections timezones = pytz.common_timezones if common_only else pytz.all_timezones # convert the milliseconds offset to a timedelta offset_days, offset_seconds = 0, int(tz_offset/1000) if offset_seconds < 0: offset_days = -1 offset_seconds += 24 * 3600 desired_delta = dt.timedelta(offset_days, offset_seconds) # Loop through the timezones and find any with matching offsets null_delta = dt.timedelta(0, 0) results = "" for tz_name in timezones: tz = pytz.timezone(tz_name) non_dst_offset = getattr(tz, '_transition_info', [[null_delta]])[-1] if desired_delta == non_dst_offset[0]: return tz_name return results