mirror of
https://github.com/python/cpython.git
synced 2025-10-27 03:34:32 +00:00
78 lines
1.6 KiB
Python
78 lines
1.6 KiB
Python
from datetime import tzinfo, timedelta
|
|
|
|
ZERO = timedelta(0)
|
|
|
|
# A UTC class.
|
|
|
|
class UTC(tzinfo):
|
|
"""UTC"""
|
|
|
|
def utcoffset(self, dt):
|
|
return ZERO
|
|
|
|
def tzname(self, dt):
|
|
return "UTC"
|
|
|
|
def dst(self, dt):
|
|
return ZERO
|
|
|
|
utc = UTC()
|
|
|
|
# A class building tzinfo objects for fixed-offset time zones.
|
|
# Note that FixedOffset(0, "UTC") is a different way to build a
|
|
# UTC tzinfo object.
|
|
|
|
class FixedOffset(tzinfo):
|
|
"""Fixed offset in minutes east from UTC."""
|
|
|
|
def __init__(self, offset, name):
|
|
self.__offset = timdelta(minutes = offset)
|
|
self.__name = name
|
|
|
|
def utcoffset(self, dt):
|
|
return self.__offset
|
|
|
|
def tzname(self, dt):
|
|
return self.__name
|
|
|
|
def dst(self, dt):
|
|
return ZERO
|
|
|
|
# A class capturing the platform's idea of local time.
|
|
|
|
import time as _time
|
|
|
|
STDOFFSET = timedelta(seconds = -_time.timezone)
|
|
if _time.daylight:
|
|
DSTOFFSET = timedelta(seconds = -_time.altzone)
|
|
else:
|
|
DSTOFFSET = STDOFFSET
|
|
|
|
DSTDIFF = DSTOFFSET - STDOFFSET
|
|
|
|
class LocalTimezone(tzinfo):
|
|
|
|
def utcoffset(self, dt):
|
|
if self._isdst(dt):
|
|
return DSTOFFSET
|
|
else:
|
|
return STDOFFSET
|
|
|
|
def dst(self, dt):
|
|
if self._isdst(dt):
|
|
return DSTDIFF
|
|
else:
|
|
return ZERO
|
|
|
|
def tzname(self, dt):
|
|
return _time.tzname[self._isdst(dt)]
|
|
|
|
def _isdst(self, dt):
|
|
tt = (dt.year, dt.month, dt.day,
|
|
dt.hour, dt.minute, dt.second,
|
|
dt.weekday(), 0, -1)
|
|
stamp = _time.mktime(tt)
|
|
tt = _time.localtime(stamp)
|
|
return tt.tm_isdst > 0
|
|
|
|
Local = LocalTimezone()
|