从纪元到相对日期的秒数

时间:2011-01-14 17:20:50

标签: python time relative epoch

我正在使用自纪元以来的日期,并且已经有了,例如:

date = 6928727.56235

我想将其转换为另一种相对格式,以便我能够将其转换为相对于纪元的内容。

使用time.gmtime(日期),它返回

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

我认为epoch开始于'01 / 01/1970 00:00:00',因此该方法应该返回相对日期,例如:

'2 months 21 days 04:38:47'

有什么帮助吗?

4 个答案:

答案 0 :(得分:5)

  

该方法应返回亲属   约会日期:   '2个月22天04:38:47'

你不能这样做,因为一个月的时间长度在28到31天之间。声明“2个月和22天”可能意味着81到84天之间的任何事情。 (或者在78到84天之间,如果月份不必连续)。

所以你想要的只是荒谬的。相对日期时间只能以天,小时和秒计算,直到差异变得太大以至于天数不再重要,在这种情况下,您可以开始计算数月或数年(但之后您不能包括天数)了)。

所以你可以说“五年零两个月”,或“80天三小时”,或“两百年”。但你不能说“两个月零三天”或“五年零二十天”。这些陈述毫无意义。

因此,正确的答案确实是eumiros

timedelta(seconds=6928727.56235)

但现在你也知道原因了。

(当然,除非你用月份实际意味着月亮周期,有固定的长度。:))

答案 1 :(得分: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)

返回80 days 04:38:47,这是正确的,但不完全是OP想要的(80天而不是2个月21天)。

答案 2 :(得分:1)

time.gmtime返回一个ParseTuple对象,您可以使用元组的各个元素进行计算。像这样的东西

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

答案 3 :(得分:0)

类似于Eumiro的答案,但无需除以60等-而是使用Pandas时间戳记,并从纪元开始算起。

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

返回

Timedelta('80 days 04:38:47.562350')