| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """
- babel.localtime._fallback
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- Emulated fallback local timezone when all else fails.
- :copyright: (c) 2013-2025 by the Babel Team.
- :license: BSD, see LICENSE for more details.
- """
- import datetime
- import time
- STDOFFSET = datetime.timedelta(seconds=-time.timezone)
- DSTOFFSET = datetime.timedelta(seconds=-time.altzone) if time.daylight else STDOFFSET
- DSTDIFF = DSTOFFSET - STDOFFSET
- ZERO = datetime.timedelta(0)
- class _FallbackLocalTimezone(datetime.tzinfo):
- def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:
- if self._isdst(dt):
- return DSTOFFSET
- else:
- return STDOFFSET
- def dst(self, dt: datetime.datetime) -> datetime.timedelta:
- if self._isdst(dt):
- return DSTDIFF
- else:
- return ZERO
- def tzname(self, dt: datetime.datetime) -> str:
- return time.tzname[self._isdst(dt)]
- def _isdst(self, dt: datetime.datetime) -> bool:
- 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
|