Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/pytz/reference.py
7771 views
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")
141
142