]>
Commit | Line | Data |
---|---|---|
1 | # Retrieved from http://docs.python.org/2/library/datetime.html on 2013-05-24 | |
2 | from datetime import tzinfo, timedelta, datetime | |
3 | ||
4 | ZERO = timedelta(0) | |
5 | HOUR = timedelta(hours=1) | |
6 | ||
7 | # A UTC class. | |
8 | ||
9 | class 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 | ||
21 | utc = 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 | ||
27 | class 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 | ||
45 | import time as _time | |
46 | ||
47 | STDOFFSET = timedelta(seconds = -_time.timezone) | |
48 | if _time.daylight: | |
49 | DSTOFFSET = timedelta(seconds = -_time.altzone) | |
50 | else: | |
51 | DSTOFFSET = STDOFFSET | |
52 | ||
53 | DSTDIFF = DSTOFFSET - STDOFFSET | |
54 | ||
55 | class 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 | ||
80 | Local = LocalTimezone() | |
81 |