You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
    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
 |