7

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

date = 6928727.56235

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

使用 time.gmtime(date),它返回

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

我认为纪元从 '01/01/1970 00:00:00' 开始,所以该方法应该以如下方式返回相对日期:

'2 months 21 days 04:38:47'

有什么帮助吗?

4

4 回答 4

5

该方法应返回相对日期,例如:'2 months 22 days 04:38:47'

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

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

所以你可以说“五年零两个月”,或者“八十天零三个小时”,或者“两百年”。但你不能说“两个月零三天”或“五年零二十天”。这些陈述根本没有意义。

因此,正确答案确实是eumiros

timedelta(seconds=6928727.56235)

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

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

于 2011-01-14T17:45:16.223 回答
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)

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

于 2011-01-14T17:30:21.557 回答
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 
于 2011-01-14T17:35:07.020 回答
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')
于 2019-06-02T05:01:37.397 回答