]> jfr.im git - z_archive/twitter.git/blame - twitter/timezones.py
bandaid unicode/str.encode-related crash bug
[z_archive/twitter.git] / twitter / timezones.py
CommitLineData
694aaadf
MC
1# Retrieved from http://docs.python.org/2/library/datetime.html on 2013-05-24
2from datetime import tzinfo, timedelta, datetime
3
4ZERO = timedelta(0)
5HOUR = timedelta(hours=1)
6
7# A UTC class.
8
9class UTC(tzinfo):
10 """UTC"""
11
12 def utcoffset(self, dt):
13 return ZERO
14
15 def tzname(self, dt):
16 return "UTC"
17
18 def dst(self, dt):
19 return ZERO
20
21utc = UTC()
22
23# A class building tzinfo objects for fixed-offset time zones.
24# Note that FixedOffset(0, "UTC") is a different way to build a
25# UTC tzinfo object.
26
27class FixedOffset(tzinfo):
28 """Fixed offset in minutes east from UTC."""
29
30 def __init__(self, offset, name):
31 self.__offset = timedelta(minutes = offset)
32 self.__name = name
33
34 def utcoffset(self, dt):
35 return self.__offset
36
37 def tzname(self, dt):
38 return self.__name
39
40 def dst(self, dt):
41 return ZERO
42
43# A class capturing the platform's idea of local time.
44
45import time as _time
46
47STDOFFSET = timedelta(seconds = -_time.timezone)
48if _time.daylight:
49 DSTOFFSET = timedelta(seconds = -_time.altzone)
50else:
51 DSTOFFSET = STDOFFSET
52
53DSTDIFF = DSTOFFSET - STDOFFSET
54
55class LocalTimezone(tzinfo):
56
57 def utcoffset(self, dt):
58 if self._isdst(dt):
59 return DSTOFFSET
60 else:
61 return STDOFFSET
62
63 def dst(self, dt):
64 if self._isdst(dt):
65 return DSTDIFF
66 else:
67 return ZERO
68
69 def tzname(self, dt):
70 return _time.tzname[self._isdst(dt)]
71
72 def _isdst(self, dt):
73 tt = (dt.year, dt.month, dt.day,
74 dt.hour, dt.minute, dt.second,
75 dt.weekday(), 0, 0)
76 stamp = _time.mktime(tt)
77 tt = _time.localtime(stamp)
78 return tt.tm_isdst > 0
79
80Local = LocalTimezone()
81