forked from raiford/freesideatlanta-members
/
timezones.py
42 lines (31 loc) · 1.04 KB
/
timezones.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import datetime
class UTC(datetime.tzinfo):
"""Plain old UTC time."""
def utcoffset(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return 'UTC'
def dst(self, dt):
return datetime.timedelta(0)
class Eastern(datetime.tzinfo):
"""An implementation of the Eastern time zone.
This is necessary because data store only uses UTC.
"""
def utcoffset(self, dt):
return datetime.timedelta(hours=-5) + self.dst(dt)
def _FirstSunday(self, dt):
return dt + datetime.timedelta(days=(6-dt.weekday()))
def dst(self, dt):
# 2 am on the second Sunday in March
dst_start = self._FirstSunday(datetime.datetime(dt.year, 3, 8, 2))
# 1 am on the first Sunday in November
dst_end = self._FirstSunday(datetime.datetime(dt.year, 11, 1, 1))
if dst_start <= dt.replace(tzinfo=None) < dst_end:
return datetime.timedelta(hours=1)
else:
return datetime.timedelta(hours=0)
def tzname(self, dt):
if self.dst(dt) == datetime.timedelta(hour=0):
return "EST"
else:
return "EDT"