我正在使用自纪元以来的日期,并且已经有了,例如:
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'
有什么帮助吗?
答案 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')