2011-01-14 36 views
5

estoy trabajando con fechas desde época, y ya tiene, por ejemplo:Python: Segundos desde el periodo hasta la fecha en relación

date = 6928727.56235 

me gustaría transformar esto en otro formato relativo, por lo que yo' Seré capaz de transformar esto en algo relativo a la época.

Usando time.gmtime (fecha), se volvieron

year=1970, mon=3, day=22, hour=4, min=38, sec=47 

Creo época comienza en '01/01/1970 00:00:00' , por lo que el método debe devolver la fecha relativa en algo así como :

'2 months 21 days 04:38:47' 

¿Algo que ayuda?

+0

de 22 de marzo de 4:38 no es de 2 meses 22 días 04:38 después del 1 de enero a las 00:00. – eumiro

+1

No, en realidad son 2 meses 21 días 04:38:47 ... – eumiro

Respuesta

4
from datetime import timedelta 

a = timedelta(seconds=6928727.56235) 

# a is now datetime.timedelta(80, 16727, 562350) 

print "%d days %02d:%02d:%02d" % (a.days, a.seconds/3600, (a.seconds/60) % 60, a.seconds % 60) 

devoluciones 80 days 04:38:47, lo cual es correcto, pero no exactamente lo que quería OP (80 días en lugar de 2 meses 21 días).

+0

+1, mi error anterior – mouad

+0

Gracias. Esta solución es suficiente para mí. –

1

time.gmtime devuelve un objeto ParseTuple y puede usar los elementos individuales de la tupla para realizar su cálculo. Algo como esto

>>> time_epoch = time.gmtime(0) 
>>> time_at_hand = time.gmtime(6928727.56235) 
>>> print "It's been %d days somewhat like %d months, %d days and %d hours, %d minutes, %d seconds " % (time_at_hand.tm_yday - time_epoch.tm_yday, time_at_hand.tm_mon - time_epoch.tm_mon , time_at_hand.tm_mday - time_epoch.tm_mday, time_at_hand.tm_hour - time_epoch.tm_hour, time_at_hand.tm_min - time_epoch.tm_min, time_at_hand.tm_sec - time_epoch.tm_sec) 
It's been 80 days somewhat like 2 months, 21 days and 4 hours, 38 minutes, 47 seconds 
+0

+1 para "algo así como". –

4

El método debe devolver el fecha relativa en algo así como: '2 meses 22 días 04:38:47'

No se puede hacer eso, desde un mes tiene entre 28 y 31 días de duración. La frase "2 meses y 22 días" podría significar cualquier cosa entre 81 y 84 días. (O entre 78 y 84 días, si los meses no tienen que ser consecutivos).

Así que lo que quiere es simplemente absurdo. Un tiempo de cita relativo solo puede contabilizarse en días, horas y segundos, hasta que la diferencia sea tan grande que la cantidad de días ya no importe, en cuyo caso puede comenzar a contar en meses o años (pero luego no puede incluir días nunca más).

Así que puede decir "cinco años y dos meses", o "80 días y tres horas", o "doscientos años". Pero no puede decir "dos meses y tres días" o "cinco años y 20 días". Las declaraciones simplemente no tienen sentido.

Por lo tanto, la respuesta correcta es, en efecto eumiros

timedelta(seconds=6928727.56235) 

Pero ahora también se sabe por qué.

(A menos que, por supuesto, con el mes realidad decir luna-ciclos, que hacer tienen una longitud fija. :))

+0

Gracias por esta explicación, y pensaré en usarla en lugar de la otra sintaxis ('dos meses ...'). Lo que dijiste tiene sentido. Gracias por este complemento. –

+0

@ GabrielL.Oliveira: En general, [un día no es 86400 (SI?) Segundos] (http: // stackoverflow.com/a/20335352/4279) exactamente a menos que estemos hablando de la hora POSIX (como implica su pregunta) que es diferente de UTC. Por lo tanto, "días + segundos + microsegundos" tiene tanto sentido como "meses + días", es decir, puede usarlos si puede ignorar (en su caso particular) la diferencia entre 86400 y 86401 (millones de microsegundos) o 28 y 31 (tres días) correspondientemente. – jfs

Cuestiones relacionadas