Frage

Ich arbeite mit Daten seit Epoche, und schon bekam, zum Beispiel:

date = 6928727.56235

Ich mag diese in einer anderen relatives Format zu transformieren, so dass ich in der Lage sein werde dies in zu Epoche etwas Relatives zu verwandeln.

Mit time.gmtime (Datum), es zurückgegeben

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

Ich denke, Epoche beginnt in '01 / 01/1970 00.00.00' , so dass das Verfahren sollte das relative Datum in so etwas wie zurückgeben:

'2 months 21 days 04:38:47'

Alles, was das helfen?

War es hilfreich?

Lösung

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)

Returns 80 days 04:38:47, was richtig ist, aber nicht genau das, was OP wollte (80 Tage statt 2 Monate 21 Tage).

Andere Tipps

Das Verfahren sollte die relative Rück Datum in so etwas wie: '2 Monate 22 Tage 04.38.47'

Sie können das nicht tun, da im Monat zwischen 28 und 31 Tagen lang. Die Aussage „2 Monate und 22 Tage“ alles zwischen 81 und 84 Tagen bedeuten könnte. (Oder zwischen 78 und 84 Tagen, wenn die Monate muss nicht aufeinanderfolgend sein).

Also, was Sie wollen, ist einfach unsinnig. Eine relative Datum Zeit kann nur in Tagen, Stunden und Sekunden gezählt werden, bis der Unterschied so groß wird, dass die Anzahl der Tage keine Rolle mehr spielt, in dem Fall, dass Sie das Zählen in Monaten oder Jahren beginnen können (aber dann können Sie nicht Tage schließen mehr).

So können Sie sagen: „5 Jahre und zwei Monate“ oder „80 Tage und drei Stunden“ oder „200 Jahre“. Aber man kann nicht sagen, „von zwei Monaten und drei Tage“ oder „5 Jahre und 20 Tage“. Die Aussagen einfach keinen Sinn machen.

Daher ist die richtige Antwort ist in der Tat eumiros

timedelta(seconds=6928727.56235)

Aber jetzt Sie auch wissen, warum.

(Es sei denn natürlich, Sie mit Monat tatsächlich mittleren Mondzyklen, die tun hat eine feste Länge.))

time.gmtime gibt ein ParseTuple Objekt und die einzelnen Elemente des Tupels verwenden können Ihre Berechnung tun. So etwas wie diese

>>> 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 

Ähnlich wie Eumiro die Antwort, aber keine Notwendigkeit zu dividieren durch 60 usw. - stattdessen verwenden Pandas Zeitstempel und nehmen Sie die Differenz aus der Epoche beginnen

.
date = 6928727.56235
import pandas as pd
pd.Timestamp(datetime.fromtimestamp(date))-pd.Timestamp(datetime.fromtimestamp(0))

Rückkehr

Timedelta('80 days 04:38:47.562350')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top