/usr/lib/python2.7/dist-packages/pycalendar/timezone.py is in python-pycalendar 2.1~svn15020-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | ##
# Copyright (c) 2007-2013 Cyrus Daboo. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##
from pycalendar import stringutils
from pycalendar.timezonedb import TimezoneDatabase
class Timezone(object):
"""
Wrapper around a timezone specification. There are three options:
UTC - when mUTC is True
TZID - when mUTC is False and tzid is a str
UTCOFFSET - when mUTC is False and tzid is an int
"""
sDefaultTimezone = None
UTCTimezone = None
def __init__(self, utc=None, tzid=None):
if utc is not None:
self.mUTC = utc
self.mTimezone = tzid
elif tzid is not None:
self.mUTC = tzid.lower() == 'utc'
self.mTimezone = None if tzid.lower() == 'utc' else tzid
else:
self.mUTC = True
self.mTimezone = None
# Copy default timezone if it exists
if Timezone.sDefaultTimezone is not None:
self.mUTC = Timezone.sDefaultTimezone.mUTC
self.mTimezone = Timezone.sDefaultTimezone.mTimezone
def duplicate(self):
return Timezone(self.mUTC, self.mTimezone)
def equals(self, comp):
# Always match if any one of them is 'floating'
if self.floating() or comp.floating():
return True
elif self.mUTC != comp.mUTC:
return False
else:
return self.mUTC or stringutils.compareStringsSafe(self.mTimezone, comp.mTimezone)
@staticmethod
def same(utc1, tzid1, utc2, tzid2):
# Always match if any one of them is 'floating'
if Timezone.is_float(utc1, tzid1) or Timezone.is_float(utc2, tzid2):
return True
elif utc1 != utc2:
return False
else:
return utc1 or stringutils.compareStringsSafe(tzid1, tzid2)
@staticmethod
def is_float(utc, tzid):
return not utc and not tzid
def getUTC(self):
return self.mUTC
def setUTC(self, utc):
self.mUTC = utc
def getTimezoneID(self):
return self.mTimezone
def setTimezoneID(self, tzid):
self.mTimezone = tzid
def floating(self):
return not self.mUTC and self.mTimezone is None
def hasTZID(self):
return not self.mUTC and self.mTimezone is not None
def timeZoneSecondsOffset(self, dt, relative_to_utc=False):
if self.mUTC:
return 0
elif self.mTimezone is None:
return TimezoneDatabase.getTimezoneOffsetSeconds(Timezone.sDefaultTimezone.getTimezoneID(), dt, relative_to_utc)
elif isinstance(self.mTimezone, int):
return self.mTimezone
else:
# Look up timezone and resolve date using default timezones
return TimezoneDatabase.getTimezoneOffsetSeconds(self.mTimezone, dt, relative_to_utc)
def timeZoneDescriptor(self, dt):
if self.mUTC:
return "(UTC)"
elif self.mTimezone is None:
return TimezoneDatabase.getTimezoneDescriptor(Timezone.sDefaultTimezone.getTimezoneID(), dt)
elif isinstance(self.mTimezone, int):
sign = "-" if self.mTimezone < 0 else "+"
hours = abs(self.mTimezone) / 3600
minutes = divmod(abs(self.mTimezone) / 60, 60)[1]
return "%s%02d%02d" % (sign, hours, minutes,)
else:
# Look up timezone and resolve date using default timezones
return TimezoneDatabase.getTimezoneDescriptor(self.mTimezone, dt)
Timezone.sDefaultTimezone = Timezone()
Timezone.UTCTimezone = Timezone(utc=True)
|