45 |
las constantes SEGUNDOS_POR_HORA, etc. definen la cuenta del tiempo. |
las constantes SEGUNDOS_POR_HORA, etc. definen la cuenta del tiempo. |
46 |
|
|
47 |
Contiene los siguientes atributos: |
Contiene los siguientes atributos: |
48 |
- __anno (int): el año dentro de la Tercera Edad |
- __anno (int): el año dentro de la Tercera Edad |
49 |
- __mes (int): el número del mes |
- __mes (int): el número del mes |
50 |
- __dia (int): el número del día |
- __dia (int): el número del día |
51 |
- __hora (int): la hora del día |
- __hora (int): la hora del día |
52 |
- __segundo (int): el segundo dentro de la hora |
- __segundo (int): el segundo dentro de la hora |
53 |
- __segundos_totales (int): el número de segundos transcurridos desde la Fecha R |
- __segundos_totales (int): el número de segundos transcurridos desde la Fecha R |
54 |
|
|
55 |
Invariantes: |
Invariantes: |
56 |
__anno >= 0 (en realidad podría ser < 0, pero no consideraremos fechas anteriores a la T.E.) |
__anno >= 0 (en realidad podría ser < 0, pero no consideraremos fechas anteriores a la T.E.) |
57 |
__mes in range(1,MESES_POR_ANNO) |
__mes in range(1,MESES_POR_ANNO) |
58 |
__dia in range(1,DIAS_POR_MES) |
__dia in range(1,DIAS_POR_MES) |
59 |
__hora in range(0,HORAS_POR_DIA-1) |
__hora in range(0,HORAS_POR_DIA-1) |
60 |
__segundo in range(0,SEGUNDOS_POR_HORA-1) |
__segundo in range(0,SEGUNDOS_POR_HORA-1) |
61 |
""" |
""" |
62 |
|
|
63 |
# Los siguientes valores representan la correspondencia Tiempo Real - Tiempo Minë. |
# Los siguientes valores representan la correspondencia Tiempo Real - Tiempo Minë. |
86 |
|
|
87 |
SECCIONES = [ (0, "Noche cerrada"), |
SECCIONES = [ (0, "Noche cerrada"), |
88 |
(4, "Madrugada"), |
(4, "Madrugada"), |
89 |
(8, "Por la mañana"), |
(8, "Por la mañana"), |
90 |
(12, "Mediodia"), |
(12, "Mediodia"), |
91 |
(16, "Por la tarde"), |
(16, "Por la tarde"), |
92 |
(20, "Por la noche") ] |
(20, "Por la noche") ] |
93 |
|
|
94 |
# La siguiente lista contiene los nombres de los meses, van ordenados de 1 a |
# La siguiente lista contiene los nombres de los meses, van ordenados de 1 a |
95 |
# MESES_POR_ANNO. |
# MESES_POR_ANNO. |
96 |
|
|
97 |
NOMBRES_MES = [ "enero", |
NOMBRES_MES = [ "enero", |
98 |
"febrero", |
"febrero", |
99 |
"marzo", |
"marzo", |
100 |
"abril", |
"abril", |
101 |
"mayo", |
"mayo", |
102 |
"junio", |
"junio", |
103 |
"julio", |
"julio", |
104 |
"agosto", |
"agosto", |
105 |
"septiembre", |
"septiembre", |
106 |
"octubre", |
"octubre", |
107 |
"noviembre", |
"noviembre", |
108 |
"diciembre" ] |
"diciembre" ] |
109 |
|
|
110 |
# Los siguientes valores son usados internamente para los cálculos. Se obtienen |
# Los siguientes valores son usados internamente para los cálculos. Se obtienen |
111 |
# automáticamente. No tocar. |
# automáticamente. No tocar. |
116 |
SEGUNDOS_POR_DIA = -1 |
SEGUNDOS_POR_DIA = -1 |
117 |
|
|
118 |
def __init__(self, segundos_totales): |
def __init__(self, segundos_totales): |
119 |
"""Constructor a partir del número de segundos totales. |
"""Constructor a partir del número de segundos totales. |
120 |
|
|
121 |
Normalmente desde fuera no se usará este constructor, sino más bien los |
Normalmente desde fuera no se usará este constructor, sino más bien los |
122 |
métodos FechaHoraMine_crear() o FechaHoraMine_ahora(). |
métodos FechaHoraMine_crear() o FechaHoraMine_ahora(). |
123 |
""" |
""" |
124 |
self.__segundos_totales = segundos_totales |
self.__segundos_totales = segundos_totales |
125 |
self.__descomponer_segundos() |
self.__descomponer_segundos() |
126 |
|
|
127 |
|
|
128 |
def __repr__(self): |
def __repr__(self): |
129 |
"""Devuelve un string representando la instancia, de una forma evaluable.""" |
"""Devuelve un string representando la instancia, de una forma evaluable.""" |
130 |
return "%d" % self.__segundos_totales |
return "%d" % self.__segundos_totales |
131 |
|
|
132 |
|
|
133 |
def __str__(self): |
def __str__(self): |
134 |
"""Devuelve un string con la fecha en formato imprimible.""" |
"""Devuelve un string con la fecha en formato imprimible.""" |
135 |
return "%d de %s de %d T.E. %02dh:%03ds" % (self.dia(), |
return "%d de %s de %d T.E. %02dh:%03ds" % (self.dia(), |
136 |
self.nombre_mes(), |
self.nombre_mes(), |
137 |
self.anno(), |
self.anno(), |
138 |
self.hora(), |
self.hora(), |
139 |
self.segundo()) |
self.segundo()) |
140 |
|
|
141 |
def anno(self): |
def anno(self): |
142 |
return self.__anno |
return self.__anno |
143 |
|
|
144 |
|
|
145 |
def mes(self): |
def mes(self): |
146 |
return self.__mes |
return self.__mes |
147 |
|
|
148 |
|
|
149 |
def nombre_mes(self): |
def nombre_mes(self): |
150 |
return FechaHoraMine.NOMBRES_MES[self.__mes - 1] |
return FechaHoraMine.NOMBRES_MES[self.__mes - 1] |
151 |
|
|
152 |
|
|
153 |
def dia(self): |
def dia(self): |
154 |
return self.__dia |
return self.__dia |
155 |
|
|
156 |
|
|
157 |
def hora(self): |
def hora(self): |
158 |
return self.__hora |
return self.__hora |
159 |
|
|
160 |
|
|
161 |
def segundo(self): |
def segundo(self): |
162 |
return self.__segundo |
return self.__segundo |
163 |
|
|
164 |
|
|
165 |
def seccion(self): |
def seccion(self): |
166 |
"""Devuelve el índice de la sección del día en que estamos.""" |
"""Devuelve el índice de la sección del día en que estamos.""" |
167 |
for i in range(len(FechaHoraMine.SECCIONES)-1, -1, -1): |
for i in range(len(FechaHoraMine.SECCIONES)-1, -1, -1): |
168 |
seccion = FechaHoraMine.SECCIONES[i] |
seccion = FechaHoraMine.SECCIONES[i] |
169 |
if self.__hora >= seccion[0]: |
if self.__hora >= seccion[0]: |
170 |
return i |
return i |
171 |
|
|
172 |
|
|
173 |
def desc_seccion(self): |
def desc_seccion(self): |
174 |
"""Devuelve la descripción de la sección del día en que estamos.""" |
"""Devuelve la descripción de la sección del día en que estamos.""" |
175 |
for i in range(len(FechaHoraMine.SECCIONES)-1, -1, -1): |
for i in range(len(FechaHoraMine.SECCIONES)-1, -1, -1): |
176 |
seccion = FechaHoraMine.SECCIONES[i] |
seccion = FechaHoraMine.SECCIONES[i] |
177 |
if self.__hora >= seccion[0]: |
if self.__hora >= seccion[0]: |
178 |
return seccion[1] |
return seccion[1] |
179 |
|
|
180 |
|
|
181 |
def __descomponer_segundos(self): |
def __descomponer_segundos(self): |
182 |
"""Extrae los valores desglosados a partir de los segundos totales.""" |
"""Extrae los valores desglosados a partir de los segundos totales.""" |
183 |
|
|
184 |
self.__anno = (self.__segundos_totales / FechaHoraMine.SEGUNDOS_POR_ANNO) \ |
self.__anno = (self.__segundos_totales / FechaHoraMine.SEGUNDOS_POR_ANNO) \ |
185 |
+ FechaHoraMine.FECHA_R_ANNO |
+ FechaHoraMine.FECHA_R_ANNO |
186 |
|
|
187 |
resto = self.__segundos_totales % FechaHoraMine.SEGUNDOS_POR_ANNO |
resto = self.__segundos_totales % FechaHoraMine.SEGUNDOS_POR_ANNO |
188 |
|
|
189 |
self.__mes = (resto / FechaHoraMine.SEGUNDOS_POR_MES) \ |
self.__mes = (resto / FechaHoraMine.SEGUNDOS_POR_MES) \ |
190 |
+ FechaHoraMine.FECHA_R_MES |
+ FechaHoraMine.FECHA_R_MES |
191 |
|
|
192 |
resto = resto % FechaHoraMine.SEGUNDOS_POR_MES |
resto = resto % FechaHoraMine.SEGUNDOS_POR_MES |
193 |
|
|
194 |
self.__dia = (resto / FechaHoraMine.SEGUNDOS_POR_DIA) \ |
self.__dia = (resto / FechaHoraMine.SEGUNDOS_POR_DIA) \ |
195 |
+ FechaHoraMine.FECHA_R_DIA |
+ FechaHoraMine.FECHA_R_DIA |
196 |
|
|
197 |
resto = resto % FechaHoraMine.SEGUNDOS_POR_DIA |
resto = resto % FechaHoraMine.SEGUNDOS_POR_DIA |
198 |
|
|
199 |
self.__hora = (resto / FechaHoraMine.SEGUNDOS_POR_HORA) \ |
self.__hora = (resto / FechaHoraMine.SEGUNDOS_POR_HORA) \ |
200 |
+ FechaHoraMine.FECHA_R_HORA |
+ FechaHoraMine.FECHA_R_HORA |
201 |
|
|
202 |
self.__segundo = (resto % FechaHoraMine.SEGUNDOS_POR_HORA) \ |
self.__segundo = (resto % FechaHoraMine.SEGUNDOS_POR_HORA) \ |
203 |
+ FechaHoraMine.FECHA_R_SEGUNDO |
+ FechaHoraMine.FECHA_R_SEGUNDO |
204 |
|
|
205 |
|
|
206 |
def __cmp__(self, otra): |
def __cmp__(self, otra): |
207 |
"""Compara dos fechas. |
"""Compara dos fechas. |
208 |
|
|
209 |
Devuelve -1, 0 o 1 si la segunda fecha es menor, igual o mayor que esta. |
Devuelve -1, 0 o 1 si la segunda fecha es menor, igual o mayor que esta. |
210 |
""" |
""" |
211 |
if self.__segundos_totales < otra.__segundos_totales: |
if self.__segundos_totales < otra.__segundos_totales: |
212 |
return -1 |
return -1 |
213 |
elif self.__segundos_totales > otra.__segundos_totales: |
elif self.__segundos_totales > otra.__segundos_totales: |
214 |
return 1 |
return 1 |
215 |
else: |
else: |
216 |
return 0 |
return 0 |
217 |
|
|
218 |
|
|
219 |
def __sub__(self, otra): |
def __sub__(self, otra): |
220 |
"""Resta esta fecha menos la otra. |
"""Resta esta fecha menos la otra. |
221 |
|
|
222 |
Devuelve la diferencia como una FechaHoraMineRel. |
Devuelve la diferencia como una FechaHoraMineRel. |
223 |
""" |
""" |
224 |
if self >= otra: |
if self >= otra: |
225 |
signo = 1 |
signo = 1 |
226 |
mayor = self |
mayor = self |
227 |
menor = otra |
menor = otra |
228 |
else: |
else: |
229 |
signo = -1 |
signo = -1 |
230 |
mayor = otra |
mayor = otra |
231 |
menor = self |
menor = self |
232 |
|
|
233 |
return FechaHoraMineRel(signo, |
return FechaHoraMineRel(signo, |
234 |
mayor.__anno - menor.__anno, |
mayor.__anno - menor.__anno, |
235 |
mayor.__mes - menor.__mes, |
mayor.__mes - menor.__mes, |
236 |
mayor.__dia - menor.__dia, |
mayor.__dia - menor.__dia, |
237 |
mayor.__hora - menor.__hora, |
mayor.__hora - menor.__hora, |
238 |
mayor.__segundo - menor.__segundo) |
mayor.__segundo - menor.__segundo) |
239 |
|
|
240 |
|
|
241 |
def __add__(self, relativa): |
def __add__(self, relativa): |
242 |
"""Suma una fecha relativa a esta. |
"""Suma una fecha relativa a esta. |
243 |
|
|
244 |
Devuelve otra fecha normal. |
Devuelve otra fecha normal. |
245 |
""" |
""" |
246 |
if relativa.signo() >= 0: |
if relativa.signo() >= 0: |
247 |
return FechaHoraMine_crear(self.__anno + relativa.annos(), |
return FechaHoraMine_crear(self.__anno + relativa.annos(), |
248 |
self.__mes + relativa.meses(), |
self.__mes + relativa.meses(), |
249 |
self.__dia + relativa.dias(), |
self.__dia + relativa.dias(), |
250 |
self.__hora + relativa.horas(), |
self.__hora + relativa.horas(), |
251 |
self.__segundo + relativa.segundos()) |
self.__segundo + relativa.segundos()) |
252 |
else: |
else: |
253 |
return FechaHoraMine_crear(self.__anno - relativa.annos(), |
return FechaHoraMine_crear(self.__anno - relativa.annos(), |
254 |
self.__mes - relativa.meses(), |
self.__mes - relativa.meses(), |
255 |
self.__dia - relativa.dias(), |
self.__dia - relativa.dias(), |
256 |
self.__hora - relativa.horas(), |
self.__hora - relativa.horas(), |
257 |
self.__segundo - relativa.segundos()) |
self.__segundo - relativa.segundos()) |
258 |
|
|
259 |
|
|
260 |
|
|
270 |
segundo = FechaHoraMine.FECHA_R_SEGUNDO): |
segundo = FechaHoraMine.FECHA_R_SEGUNDO): |
271 |
"""Devuelve una FechaHoraMine correspondiente a los datos pasados.""" |
"""Devuelve una FechaHoraMine correspondiente a los datos pasados.""" |
272 |
segundos_totales = (anno - FechaHoraMine.FECHA_R_ANNO) * FechaHoraMine.SEGUNDOS_POR_ANNO \ |
segundos_totales = (anno - FechaHoraMine.FECHA_R_ANNO) * FechaHoraMine.SEGUNDOS_POR_ANNO \ |
273 |
+ (mes - FechaHoraMine.FECHA_R_MES) * FechaHoraMine.SEGUNDOS_POR_MES \ |
+ (mes - FechaHoraMine.FECHA_R_MES) * FechaHoraMine.SEGUNDOS_POR_MES \ |
274 |
+ (dia - FechaHoraMine.FECHA_R_DIA) * FechaHoraMine.SEGUNDOS_POR_DIA \ |
+ (dia - FechaHoraMine.FECHA_R_DIA) * FechaHoraMine.SEGUNDOS_POR_DIA \ |
275 |
+ (hora - FechaHoraMine.FECHA_R_HORA) * FechaHoraMine.SEGUNDOS_POR_HORA \ |
+ (hora - FechaHoraMine.FECHA_R_HORA) * FechaHoraMine.SEGUNDOS_POR_HORA \ |
276 |
+ (segundo - FechaHoraMine.FECHA_R_SEGUNDO) |
+ (segundo - FechaHoraMine.FECHA_R_SEGUNDO) |
277 |
return FechaHoraMine(segundos_totales) |
return FechaHoraMine(segundos_totales) |
278 |
|
|
279 |
|
|
305 |
ejemplo, 1.5 dias se convierte a 1 dia y 12 horas. |
ejemplo, 1.5 dias se convierte a 1 dia y 12 horas. |
306 |
|
|
307 |
Invariantes: |
Invariantes: |
308 |
__signo in [-1, 1] |
__signo in [-1, 1] |
309 |
__annos >= 0 |
__annos >= 0 |
310 |
""" |
""" |
311 |
|
|
312 |
def __init__(self, signo=1, annos=0, meses=0, dias=0, horas=0, segundos=0): |
def __init__(self, signo=1, annos=0, meses=0, dias=0, horas=0, segundos=0): |
313 |
"""Constructor a partir de los componentes. |
"""Constructor a partir de los componentes. |
314 |
|
|
315 |
Requiere: |
Requiere: |
316 |
signo in [-1, 1] |
signo in [-1, 1] |
317 |
annos >= 0 |
annos >= 0 |
318 |
""" |
""" |
319 |
self.__signo = signo |
self.__signo = signo |
320 |
self.__annos = int(annos) |
self.__annos = int(annos) |
321 |
self.__meses = int(meses) |
self.__meses = int(meses) |
322 |
self.__dias = int(dias) |
self.__dias = int(dias) |
323 |
self.__horas = int(horas) |
self.__horas = int(horas) |
324 |
self.__segundos = int(segundos) |
self.__segundos = int(segundos) |
325 |
|
|
326 |
# Asignar las partes fraccionarias a la unidad inferior |
# Asignar las partes fraccionarias a la unidad inferior |
327 |
self.__meses += int((annos - int(annos)) * FechaHoraMine.MESES_POR_ANNO) |
self.__meses += int((annos - int(annos)) * FechaHoraMine.MESES_POR_ANNO) |
328 |
self.__dias += int((meses - int(meses)) * FechaHoraMine.DIAS_POR_MES) |
self.__dias += int((meses - int(meses)) * FechaHoraMine.DIAS_POR_MES) |
329 |
self.__horas += int((dias - int(dias)) * FechaHoraMine.HORAS_POR_DIA) |
self.__horas += int((dias - int(dias)) * FechaHoraMine.HORAS_POR_DIA) |
330 |
self.__segundos += int((horas - int(horas)) * FechaHoraMine.SEGUNDOS_POR_HORA) |
self.__segundos += int((horas - int(horas)) * FechaHoraMine.SEGUNDOS_POR_HORA) |
331 |
self.__horas += int((dias - int(dias)) * FechaHoraMine.HORAS_POR_DIA) |
self.__horas += int((dias - int(dias)) * FechaHoraMine.HORAS_POR_DIA) |
332 |
|
|
333 |
|
|
334 |
def __repr__(self): |
def __repr__(self): |
335 |
"""Devuelve un string representando la instancia, de una forma evaluable.""" |
"""Devuelve un string representando la instancia, de una forma evaluable.""" |
336 |
return "%s%04d/%02d/%02d %02d:%03d" % (((self.__signo < 0) and "(-)" or ""), |
return "%s%04d/%02d/%02d %02d:%03d" % (((self.__signo < 0) and "(-)" or ""), |
337 |
self.__annos, self.__meses, self.__dias, |
self.__annos, self.__meses, self.__dias, |
338 |
self.__horas, self.__segundos) |
self.__horas, self.__segundos) |
339 |
|
|
340 |
|
|
341 |
def __str__(self): |
def __str__(self): |
342 |
"""Devuelve un string con la fecha en formato imprimible.""" |
"""Devuelve un string con la fecha en formato imprimible.""" |
343 |
return "%s%04d/%02d/%02d %02d:%03d" % (((self.__signo < 0) and "(-)" or ""), |
return "%s%04d/%02d/%02d %02d:%03d" % (((self.__signo < 0) and "(-)" or ""), |
344 |
self.__annos, self.__meses, self.__dias, |
self.__annos, self.__meses, self.__dias, |
345 |
self.__horas, self.__segundos) |
self.__horas, self.__segundos) |
346 |
|
|
347 |
def signo(self): |
def signo(self): |
348 |
return self.__signo |
return self.__signo |
349 |
|
|
350 |
|
|
351 |
def annos(self): |
def annos(self): |
352 |
return self.__annos |
return self.__annos |
353 |
|
|
354 |
|
|
355 |
def meses(self): |
def meses(self): |
356 |
return self.__meses |
return self.__meses |
357 |
|
|
358 |
|
|
359 |
def dias(self): |
def dias(self): |
360 |
return self.__dias |
return self.__dias |
361 |
|
|
362 |
|
|
363 |
def horas(self): |
def horas(self): |
364 |
return self.__horas |
return self.__horas |
365 |
|
|
366 |
|
|
367 |
def segundos(self): |
def segundos(self): |
368 |
return self.__segundos |
return self.__segundos |
369 |
|
|
370 |
|
|
371 |
def inverso(self): |
def inverso(self): |
372 |
"""Devuelve el mismo intervalo con el signo invertido.""" |
"""Devuelve el mismo intervalo con el signo invertido.""" |
373 |
if otra.signo() >= 0: |
if otra.signo() >= 0: |
374 |
signo_inverso = -1 |
signo_inverso = -1 |
375 |
else: |
else: |
376 |
signo_inverso = 1 |
signo_inverso = 1 |
377 |
|
|
378 |
return FechaHoraMineRel(signo_inverso, |
return FechaHoraMineRel(signo_inverso, |
379 |
self.annos(), |
self.annos(), |
380 |
self.meses(), |
self.meses(), |
381 |
self.dias(), |
self.dias(), |
382 |
self.horas(), |
self.horas(), |
383 |
self.segundos()) |
self.segundos()) |
384 |
|
|
385 |
|
|
386 |
def abs(self): |
def abs(self): |
387 |
"""Devuelve el mismo intervalo eliminando el signo.""" |
"""Devuelve el mismo intervalo eliminando el signo.""" |
388 |
return FechaHoraMineRel(1, |
return FechaHoraMineRel(1, |
389 |
self.annos(), |
self.annos(), |
390 |
self.meses(), |
self.meses(), |
391 |
self.dias(), |
self.dias(), |
392 |
self.horas(), |
self.horas(), |
393 |
self.segundos()) |
self.segundos()) |
394 |
|
|
395 |
|
|
396 |
def __cmp__(self, otra): |
def __cmp__(self, otra): |
397 |
"""Compara dos intervalos de fechas. |
"""Compara dos intervalos de fechas. |
398 |
|
|
399 |
Devuelve -1, 0 o 1 si el segundo intervalo es más, igual o menos largo que éste. |
Devuelve -1, 0 o 1 si el segundo intervalo es más, igual o menos largo que éste. |
400 |
""" |
""" |
401 |
# Esto lo tengo que revisar un poco, no sé si funciona bien en todos los casos. |
# Esto lo tengo que revisar un poco, no sé si funciona bien en todos los casos. |
402 |
if self.signo() > otra.signo(): |
if self.signo() > otra.signo(): |
403 |
return 1 |
return 1 |
404 |
elif self.signo() < otra.signo(): |
elif self.signo() < otra.signo(): |
405 |
return -1 |
return -1 |
406 |
else: |
else: |
407 |
if self.anno() > otra.anno(): |
if self.anno() > otra.anno(): |
408 |
return 1 |
return 1 |
409 |
elif self.anno() < otra.anno(): |
elif self.anno() < otra.anno(): |
410 |
return -1 |
return -1 |
411 |
else: |
else: |
412 |
if self.mes() > otra.mes(): |
if self.mes() > otra.mes(): |
413 |
return 1 |
return 1 |
414 |
elif self.mes() < otra.mes(): |
elif self.mes() < otra.mes(): |
415 |
return -1 |
return -1 |
416 |
else: |
else: |
417 |
if self.dia() > otra.dia(): |
if self.dia() > otra.dia(): |
418 |
return 1 |
return 1 |
419 |
elif self.dia() < otra.dia(): |
elif self.dia() < otra.dia(): |
420 |
return -1 |
return -1 |
421 |
else: |
else: |
422 |
if self.hora() > otra.hora(): |
if self.hora() > otra.hora(): |
423 |
return 1 |
return 1 |
424 |
elif self.hora() < otra.hora(): |
elif self.hora() < otra.hora(): |
425 |
return -1 |
return -1 |
426 |
else: |
else: |
427 |
if self.segundo() > otra.segundo(): |
if self.segundo() > otra.segundo(): |
428 |
return 1 |
return 1 |
429 |
elif self.segundo() < otra.segundo(): |
elif self.segundo() < otra.segundo(): |
430 |
return -1 |
return -1 |
431 |
else: |
else: |
432 |
return 0 |
return 0 |
433 |
|
|
434 |
|
|
435 |
def __sub__(self, otra): |
def __sub__(self, otra): |
436 |
"""Resta este intervalo menos el otro. |
"""Resta este intervalo menos el otro. |
437 |
|
|
438 |
Devuelve la diferencia como una FechaHoraMineRel. |
Devuelve la diferencia como una FechaHoraMineRel. |
439 |
""" |
""" |
440 |
# Restar es lo mismo que sumar el inverso. |
# Restar es lo mismo que sumar el inverso. |
441 |
return self + otra.inverso() |
return self + otra.inverso() |
442 |
|
|
443 |
|
|
444 |
def __add__(self, otra): |
def __add__(self, otra): |
445 |
"""Suma un intervalo a este. |
"""Suma un intervalo a este. |
446 |
|
|
447 |
Devuelve otra fecha relativa. |
Devuelve otra fecha relativa. |
448 |
""" |
""" |
449 |
if self.signo() == otra.signo(): |
if self.signo() == otra.signo(): |
450 |
signo = self.signo() |
signo = self.signo() |
451 |
else: |
else: |
452 |
if self.abs().signo() >= otra.abs().signo(): |
if self.abs().signo() >= otra.abs().signo(): |
453 |
signo = self.signo() |
signo = self.signo() |
454 |
else: |
else: |
455 |
signo = otra.signo() |
signo = otra.signo() |
456 |
|
|
457 |
if self.signo() == otra.signo(): |
if self.signo() == otra.signo(): |
458 |
return FechaHoraRelativa(signo, |
return FechaHoraRelativa(signo, |
459 |
self.anno() + otra.anno(), |
self.anno() + otra.anno(), |
460 |
self.mes() + otra.mes(), |
self.mes() + otra.mes(), |
461 |
self.dia() + otra.dia(), |
self.dia() + otra.dia(), |
462 |
self.hora() + otra.hora(), |
self.hora() + otra.hora(), |
463 |
self.segundo() + otra.segundo()) |
self.segundo() + otra.segundo()) |
464 |
else: |
else: |
465 |
return FechaHoraRelativa(signo, |
return FechaHoraRelativa(signo, |
466 |
self.anno() - otra.anno(), |
self.anno() - otra.anno(), |
467 |
self.mes() - otra.mes(), |
self.mes() - otra.mes(), |
468 |
self.dia() - otra.dia(), |
self.dia() - otra.dia(), |
469 |
self.hora() - otra.hora(), |
self.hora() - otra.hora(), |
470 |
self.segundo() - otra.segundo()) |
self.segundo() - otra.segundo()) |
471 |
|
|
472 |
|
|
473 |
|
|
481 |
|
|
482 |
FechaHoraMine.FECHA_R_REAL_SEGUNDOS_TOTALES = int(mktime((FechaHoraMine.FECHA_R_REAL_ANNO, |
FechaHoraMine.FECHA_R_REAL_SEGUNDOS_TOTALES = int(mktime((FechaHoraMine.FECHA_R_REAL_ANNO, |
483 |
FechaHoraMine.FECHA_R_REAL_MES, |
FechaHoraMine.FECHA_R_REAL_MES, |
484 |
FechaHoraMine.FECHA_R_REAL_DIA, |
FechaHoraMine.FECHA_R_REAL_DIA, |
485 |
FechaHoraMine.FECHA_R_REAL_HORA, |
FechaHoraMine.FECHA_R_REAL_HORA, |
486 |
FechaHoraMine.FECHA_R_REAL_MINUTO, |
FechaHoraMine.FECHA_R_REAL_MINUTO, |
487 |
FechaHoraMine.FECHA_R_REAL_SEGUNDO, |
FechaHoraMine.FECHA_R_REAL_SEGUNDO, |
488 |
-1, -1, -1)) + 0.5) |
-1, -1, -1)) + 0.5) |
489 |
|
|
490 |
# Los siguientes valores son simplemente para acelerar los cálculos internos |
# Los siguientes valores son simplemente para acelerar los cálculos internos |
491 |
|
|
492 |
FechaHoraMine.SEGUNDOS_POR_DIA = FechaHoraMine.SEGUNDOS_POR_HORA * \ |
FechaHoraMine.SEGUNDOS_POR_DIA = FechaHoraMine.SEGUNDOS_POR_HORA * \ |
493 |
FechaHoraMine.HORAS_POR_DIA |
FechaHoraMine.HORAS_POR_DIA |
494 |
|
|
495 |
FechaHoraMine.SEGUNDOS_POR_MES = FechaHoraMine.SEGUNDOS_POR_DIA * \ |
FechaHoraMine.SEGUNDOS_POR_MES = FechaHoraMine.SEGUNDOS_POR_DIA * \ |
496 |
FechaHoraMine.DIAS_POR_MES |
FechaHoraMine.DIAS_POR_MES |
497 |
|
|
515 |
print "[%s]\n mas [%s]\n es [%s]" % (str(a), str(r), str(a + r)) |
print "[%s]\n mas [%s]\n es [%s]" % (str(a), str(r), str(a + r)) |
516 |
|
|
517 |
while 1: |
while 1: |
518 |
ahora = FechaHoraMine_ahora() |
ahora = FechaHoraMine_ahora() |
519 |
print "%s (%s)" % (ahora, ahora.desc_seccion()) |
print "%s (%s)" % (ahora, ahora.desc_seccion()) |
520 |
sleep(1) |
sleep(1) |
521 |
|
|