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
							 |