1
2
3
4
5
6
7
8
9
10 """ Module to handle BITPIM date & time """
11
12 import calendar
13 import datetime
14 import time
15
16 timedelta=datetime.timedelta
17
20 self._date=self._time=None
21
22 if isinstance(v, (str, unicode)):
23 self.set_iso_str(v)
24 elif isinstance(v, (tuple, list)):
25 self.set(v)
26 elif isinstance(v, datetime.date):
27 self._date=v
28
31 date=property(fget=_get_date)
34 time=property(fget=_get_time)
35
48
58 if isinstance(rhs, BPTime):
59 return self.date==rhs.date
60 return False
62 if isinstance(rhs, BPTime):
63 return self.date!=rhs.date
64 return False
66 if isinstance(rhs, BPTime):
67 return self.date<rhs.date
68 return False
70 if isinstance(rhs, BPTime):
71 return self.date<=rhs.date
72 return False
74 if isinstance(rhs, BPTime):
75 return self.date>rhs.date
76 return False
78 if isinstance(rhs, BPTime):
79 return self.date>=rhs.date
80 return False
81
83
84 if self._date is None or self._time is None:
85 return
86 gmt=calendar.timegm((self._date.year, self._date.month, self._date.day,
87 self._time.hour, self._time.minute, 0))
88 if offset_str is not None:
89
90 offset_sec=int(offset_str[1:3])*3600.0+int(offset_str[3:5])*60.0
91 if offset_str[0]=='-':
92 gmt+=offset_sec
93 else:
94 gmt-=offset_sec
95 dt=datetime.datetime.fromtimestamp(gmt)
96 self._date=dt.date()
97 self._time=dt.time()
99
100
101
102
103 v=str(v)
104 len_v=len(v)
105 if len_v<8:
106
107 return
108
109 self._date=datetime.date(int(v[:4]), int(v[4:6]), int(v[6:8]))
110 self._time=None
111 if len_v>12:
112
113 self._time=datetime.time(hour=int(v[9:11]), minute=int(v[11:13]))
114
115 if v[-1]=='Z':
116
117 self._utc_to_local()
118 elif v[-5]=='-' or v[-5]=='+':
119 self._utc_to_local(v[-5:])
120
121 - def iso_str(self, no_time=False, no_seconds=True):
122
123 s=''
124 if self._date is not None:
125 s='%04d%02d%02d'%(self._date.year, self._date.month,
126 self._date.day)
127 if self._time is not None and not no_time:
128 s+='T%02d%02d'%(self._time.hour, self._time.minute)
129 if not no_seconds:
130 s+='00'
131 return s
132
134 if self._date is None:
135 s=''
136 else:
137 s='%04d-%02d-%02d'%(self._date.year, self._date.month,
138 self._date.day)
139 return s
140
141 - def time_str(self, am_pm=True, default=''):
142 if self._time is None:
143 s=default
144 else:
145 h=self._time.hour
146 if am_pm:
147 if h>11:
148 ampm_str='pm'
149 else:
150 ampm_str='am'
151 if h>12:
152 h-=12
153 s='%02d:%02d%s'%(h, self._time.minute, ampm_str)
154 else:
155 s='%02d:%02d'%(h, self._time.minute)
156 return s
157
158 - def get(self, default=(0,0,0,0,0)):
159 if self._date is None:
160 t=default[:3]
161 else:
162 t=(self._date.year, self._date.month, self._date.day)
163 if self._time is None:
164 t+=default[3:5]
165 else:
166 t+=(self._time.hour, self._time.minute)
167 return t
168
175
179