Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/site-packages/pytz/reference.py @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 ''' | |
2 Reference tzinfo implementations from the Python docs. | |
3 Used for testing against as they are only correct for the years | |
4 1987 to 2006. Do not use these for real code. | |
5 ''' | |
6 | |
7 from datetime import tzinfo, timedelta, datetime | |
8 from pytz import HOUR, ZERO, UTC | |
9 | |
10 __all__ = [ | |
11 'FixedOffset', | |
12 'LocalTimezone', | |
13 'USTimeZone', | |
14 'Eastern', | |
15 'Central', | |
16 'Mountain', | |
17 'Pacific', | |
18 'UTC' | |
19 ] | |
20 | |
21 | |
22 # A class building tzinfo objects for fixed-offset time zones. | |
23 # Note that FixedOffset(0, "UTC") is a different way to build a | |
24 # UTC tzinfo object. | |
25 class FixedOffset(tzinfo): | |
26 """Fixed offset in minutes east from UTC.""" | |
27 | |
28 def __init__(self, offset, name): | |
29 self.__offset = timedelta(minutes=offset) | |
30 self.__name = name | |
31 | |
32 def utcoffset(self, dt): | |
33 return self.__offset | |
34 | |
35 def tzname(self, dt): | |
36 return self.__name | |
37 | |
38 def dst(self, dt): | |
39 return ZERO | |
40 | |
41 | |
42 import time as _time | |
43 | |
44 STDOFFSET = timedelta(seconds=-_time.timezone) | |
45 if _time.daylight: | |
46 DSTOFFSET = timedelta(seconds=-_time.altzone) | |
47 else: | |
48 DSTOFFSET = STDOFFSET | |
49 | |
50 DSTDIFF = DSTOFFSET - STDOFFSET | |
51 | |
52 | |
53 # A class capturing the platform's idea of local time. | |
54 class LocalTimezone(tzinfo): | |
55 | |
56 def utcoffset(self, dt): | |
57 if self._isdst(dt): | |
58 return DSTOFFSET | |
59 else: | |
60 return STDOFFSET | |
61 | |
62 def dst(self, dt): | |
63 if self._isdst(dt): | |
64 return DSTDIFF | |
65 else: | |
66 return ZERO | |
67 | |
68 def tzname(self, dt): | |
69 return _time.tzname[self._isdst(dt)] | |
70 | |
71 def _isdst(self, dt): | |
72 tt = (dt.year, dt.month, dt.day, | |
73 dt.hour, dt.minute, dt.second, | |
74 dt.weekday(), 0, -1) | |
75 stamp = _time.mktime(tt) | |
76 tt = _time.localtime(stamp) | |
77 return tt.tm_isdst > 0 | |
78 | |
79 Local = LocalTimezone() | |
80 | |
81 | |
82 def first_sunday_on_or_after(dt): | |
83 days_to_go = 6 - dt.weekday() | |
84 if days_to_go: | |
85 dt += timedelta(days_to_go) | |
86 return dt | |
87 | |
88 | |
89 # In the US, DST starts at 2am (standard time) on the first Sunday in April. | |
90 DSTSTART = datetime(1, 4, 1, 2) | |
91 # and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct. | |
92 # which is the first Sunday on or after Oct 25. | |
93 DSTEND = datetime(1, 10, 25, 1) | |
94 | |
95 | |
96 # A complete implementation of current DST rules for major US time zones. | |
97 class USTimeZone(tzinfo): | |
98 | |
99 def __init__(self, hours, reprname, stdname, dstname): | |
100 self.stdoffset = timedelta(hours=hours) | |
101 self.reprname = reprname | |
102 self.stdname = stdname | |
103 self.dstname = dstname | |
104 | |
105 def __repr__(self): | |
106 return self.reprname | |
107 | |
108 def tzname(self, dt): | |
109 if self.dst(dt): | |
110 return self.dstname | |
111 else: | |
112 return self.stdname | |
113 | |
114 def utcoffset(self, dt): | |
115 return self.stdoffset + self.dst(dt) | |
116 | |
117 def dst(self, dt): | |
118 if dt is None or dt.tzinfo is None: | |
119 # An exception may be sensible here, in one or both cases. | |
120 # It depends on how you want to treat them. The default | |
121 # fromutc() implementation (called by the default astimezone() | |
122 # implementation) passes a datetime with dt.tzinfo is self. | |
123 return ZERO | |
124 assert dt.tzinfo is self | |
125 | |
126 # Find first Sunday in April & the last in October. | |
127 start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) | |
128 end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) | |
129 | |
130 # Can't compare naive to aware objects, so strip the timezone from | |
131 # dt first. | |
132 if start <= dt.replace(tzinfo=None) < end: | |
133 return HOUR | |
134 else: | |
135 return ZERO | |
136 | |
137 Eastern = USTimeZone(-5, "Eastern", "EST", "EDT") | |
138 Central = USTimeZone(-6, "Central", "CST", "CDT") | |
139 Mountain = USTimeZone(-7, "Mountain", "MST", "MDT") | |
140 Pacific = USTimeZone(-8, "Pacific", "PST", "PDT") |