app/django/utils/tzinfo.py
changeset 323 ff1a9aa48cfd
parent 54 03e267d67478
equal deleted inserted replaced
322:6641e941ef1e 323:ff1a9aa48cfd
    12     DEFAULT_ENCODING = 'ascii'
    12     DEFAULT_ENCODING = 'ascii'
    13 
    13 
    14 class FixedOffset(tzinfo):
    14 class FixedOffset(tzinfo):
    15     "Fixed offset in minutes east from UTC."
    15     "Fixed offset in minutes east from UTC."
    16     def __init__(self, offset):
    16     def __init__(self, offset):
    17         self.__offset = timedelta(minutes=offset)
    17         if isinstance(offset, timedelta):
    18         self.__name = u"%+03d%02d" % (offset // 60, offset % 60)
    18             self.__offset = offset
       
    19             offset = self.__offset.seconds // 60
       
    20         else:
       
    21             self.__offset = timedelta(minutes=offset)
       
    22 
       
    23         self.__name = u"%+03d%02d" % (offset / 60, offset % 60)
    19 
    24 
    20     def __repr__(self):
    25     def __repr__(self):
    21         return self.__name
    26         return self.__name
    22 
    27 
    23     def utcoffset(self, dt):
    28     def utcoffset(self, dt):
    30         return timedelta(0)
    35         return timedelta(0)
    31 
    36 
    32 class LocalTimezone(tzinfo):
    37 class LocalTimezone(tzinfo):
    33     "Proxy timezone information from time module."
    38     "Proxy timezone information from time module."
    34     def __init__(self, dt):
    39     def __init__(self, dt):
    35         tzinfo.__init__(self, dt)
    40         tzinfo.__init__(self)
    36         self._tzname = self.tzname(dt)
    41         self._tzname = self.tzname(dt)
    37 
    42 
    38     def __repr__(self):
    43     def __repr__(self):
    39         return self._tzname
    44         return self._tzname
    40 
    45 
    58 
    63 
    59     def _isdst(self, dt):
    64     def _isdst(self, dt):
    60         tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
    65         tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1)
    61         try:
    66         try:
    62             stamp = time.mktime(tt)
    67             stamp = time.mktime(tt)
    63         except OverflowError:
    68         except (OverflowError, ValueError):
    64             # 32 bit systems can't handle dates after Jan 2038, so we fake it
    69             # 32 bit systems can't handle dates after Jan 2038, and certain
    65             # in that case (since we only care about the DST flag here).
    70             # systems can't handle dates before ~1901-12-01:
       
    71             #
       
    72             # >>> time.mktime((1900, 1, 13, 0, 0, 0, 0, 0, 0))
       
    73             # OverflowError: mktime argument out of range
       
    74             # >>> time.mktime((1850, 1, 13, 0, 0, 0, 0, 0, 0))
       
    75             # ValueError: year out of range
       
    76             #
       
    77             # In this case, we fake the date, because we only care about the
       
    78             # DST flag.
    66             tt = (2037,) + tt[1:]
    79             tt = (2037,) + tt[1:]
    67             stamp = time.mktime(tt)
    80             stamp = time.mktime(tt)
    68         tt = time.localtime(stamp)
    81         tt = time.localtime(stamp)
    69         return tt.tm_isdst > 0
    82         return tt.tm_isdst > 0