| 
									
										
										
										
											2003-01-02 21:28:08 +00:00
										 |  |  | from datetime import tzinfo, timedelta | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ZERO = timedelta(0) | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  | # A UTC class. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | class UTC(tzinfo): | 
					
						
							|  |  |  |     """UTC""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def utcoffset(self, dt): | 
					
						
							| 
									
										
										
										
											2003-01-02 21:28:08 +00:00
										 |  |  |         return ZERO | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tzname(self, dt): | 
					
						
							|  |  |  |         return "UTC" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def dst(self, dt): | 
					
						
							| 
									
										
										
										
											2003-01-02 21:28:08 +00:00
										 |  |  |         return ZERO | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | class FixedOffset(tzinfo): | 
					
						
							|  |  |  |     """Fixed offset in minutes east from UTC.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, offset, name): | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  |         self.__offset = timdelta(minutes = offset) | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  |         self.__name = name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def utcoffset(self, dt): | 
					
						
							|  |  |  |         return self.__offset | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tzname(self, dt): | 
					
						
							|  |  |  |         return self.__name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def dst(self, dt): | 
					
						
							| 
									
										
										
										
											2003-01-02 21:28:08 +00:00
										 |  |  |         return ZERO | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  | # A class capturing the platform's idea of local time. | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  | import time as _time | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  | STDOFFSET = timedelta(seconds = -_time.timezone) | 
					
						
							|  |  |  | if _time.daylight: | 
					
						
							|  |  |  |     DSTOFFSET = timedelta(seconds = -_time.altzone) | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     DSTOFFSET = STDOFFSET | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DSTDIFF = DSTOFFSET - STDOFFSET | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LocalTimezone(tzinfo): | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def utcoffset(self, dt): | 
					
						
							|  |  |  |         if self._isdst(dt): | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  |             return DSTOFFSET | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  |             return STDOFFSET | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def dst(self, dt): | 
					
						
							|  |  |  |         if self._isdst(dt): | 
					
						
							|  |  |  |             return DSTDIFF | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return ZERO | 
					
						
							| 
									
										
										
										
											2002-12-23 18:52:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tzname(self, dt): | 
					
						
							| 
									
										
										
										
											2003-01-03 22:26:57 +00:00
										 |  |  |         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() |