svv/utils.py
changeset 58 4f4150296cd3
equal deleted inserted replaced
57:7a48e9d96ec8 58:4f4150296cd3
       
     1 """
       
     2     Miscellanous bucket of everything
       
     3 """
       
     4 
       
     5 import datetime
       
     6 import time
       
     7 
       
     8 class LocalTimezone (datetime.tzinfo) :
       
     9     """
       
    10         Our platform's (the 'time' module) idea of our local timezone.
       
    11     """
       
    12 
       
    13     ZERO = datetime.timedelta(0)
       
    14 
       
    15     STDOFFSET = datetime.timedelta(seconds = -time.timezone)
       
    16 
       
    17     if time.daylight:
       
    18         DSTOFFSET = datetime.timedelta(seconds = -time.altzone)
       
    19     else:
       
    20         DSTOFFSET = STDOFFSET
       
    21 
       
    22     DSTDIFF = DSTOFFSET - STDOFFSET
       
    23 
       
    24     def _isdst (self, dt) :
       
    25         # time tuple in local time
       
    26         tt = (dt.year, dt.month, dt.day,
       
    27               dt.hour, dt.minute, dt.second,
       
    28               dt.weekday(), 0, -1)
       
    29         
       
    30         # to UTC timestamp
       
    31         stamp = time.mktime(tt)
       
    32         
       
    33         # roundtrip..
       
    34         tt = time.localtime(stamp)
       
    35         
       
    36         # to figure out DST flag
       
    37         return tt.tm_isdst > 0
       
    38 
       
    39     def utcoffset (self, dt) :
       
    40         if self._isdst(dt) :
       
    41             return self.DSTOFFSET
       
    42         else:
       
    43             return self.STDOFFSET
       
    44 
       
    45     def dst (self, dt) :
       
    46         if self._isdst(dt) :
       
    47             return self.DSTDIFF
       
    48         else:
       
    49             return self.ZERO
       
    50 
       
    51     def tzname (self, dt) :
       
    52         # varies by DST
       
    53         return time.tzname[self._isdst(dt)]
       
    54 
       
    55