codekingpro/portable-devtools
114k
1"""2 babel.localtime._fallback3 ~~~~~~~~~~~~~~~~~~~~~~~~~4 5 Emulated fallback local timezone when all else fails.6 7 :copyright: (c) 2013-2024 by the Babel Team.8 :license: BSD, see LICENSE for more details.9"""10 11import datetime12import time13 14STDOFFSET = datetime.timedelta(seconds=-time.timezone)15DSTOFFSET = datetime.timedelta(seconds=-time.altzone) if time.daylight else STDOFFSET16 17DSTDIFF = DSTOFFSET - STDOFFSET18ZERO = datetime.timedelta(0)19 20 21class _FallbackLocalTimezone(datetime.tzinfo):22 23 def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:24 if self._isdst(dt):25 return DSTOFFSET26 else:27 return STDOFFSET28 29 def dst(self, dt: datetime.datetime) -> datetime.timedelta:30 if self._isdst(dt):31 return DSTDIFF32 else:33 return ZERO34 35 def tzname(self, dt: datetime.datetime) -> str:36 return time.tzname[self._isdst(dt)]37 38 def _isdst(self, dt: datetime.datetime) -> bool:39 tt = (dt.year, dt.month, dt.day,40 dt.hour, dt.minute, dt.second,41 dt.weekday(), 0, -1)42 stamp = time.mktime(tt)43 tt = time.localtime(stamp)44 return tt.tm_isdst > 045 