关于python:从纪元到相对日期的秒数

Seconds since epoch to relative date

我从新纪元开始就在研究日期,例如:

1
date = 6928727.56235

我想把它转换成另一种相对格式,这样我就能把它转换成与时代相关的格式。

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

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

我认为epoch开始于‘01/01/1970 00:00:00’,所以方法应该返回相关日期,如下所示:

1
'2 months 21 days 04:38:47'

有什么帮助吗?


The method should return the relative
date in something like:
'2 months 22 days 04:38:47'

你不能这样做,因为一个月有28到31天。声明"2个月22天"可能意味着81到84天之间的任何事情。(或者在78到84天之间,如果不需要连续几个月的话)。

所以你想要的只是胡说八道。相对日期时间只能以天、小时和秒为单位计算,直到差异变得如此之大以至于天数不再重要为止,在这种情况下,您可以开始以月或年为单位计算(但这样您就不能再包括天)。

所以你可以说"5年2个月",或者"80天3小时",或者"200年"。但你不能说"两个月三天"或"五年二十天"。这些说法毫无意义。

因此,正确的答案确实是尤米罗斯。

1
timedelta(seconds=6928727.56235)

但现在你也知道为什么了。

(当然,除非你的月实际上是指月球周期,它的长度是固定的。:)


1
2
3
4
5
6
7
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天)。


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

1
2
3
4
>>> 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


与Eumiro的答案类似,但不需要除以60等——相反,使用Pandas时间戳,并从新纪元开始计算差异。

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

退货

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