Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从历元到相对日期的秒数_Python_Time_Epoch - Fatal编程技术网

Python 从历元到相对日期的秒数

Python 从历元到相对日期的秒数,python,time,epoch,Python,Time,Epoch,我从大纪元起就开始研究日期,例如: date = 6928727.56235 我想把它转换成另一种相对的格式,这样我就可以把它转换成与epoch相关的东西 使用time.gmtime(date)返回 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' 有什么有用的吗 from dat

我从大纪元起就开始研究日期,例如:

date = 6928727.56235
我想把它转换成另一种相对的格式,这样我就可以把它转换成与epoch相关的东西

使用time.gmtime(date)返回

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'
有什么有用的吗

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天04:38:47
,这是正确的,但不完全是OP想要的(80天而不是2个月21天)

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 
该方法应返回相对值 以类似以下的方式进行约会: “2个月22天04:38:47”

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

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

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

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

timedelta(seconds=6928727.56235)
但现在你也知道为什么了


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

类似于Eumiro的答案,但不需要除以60等-相反,使用时间戳,并从纪元开始处取差

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

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

3月22日04:38不是2个月22日04:38在1月1日00:00之后。不,实际上是2个月21日04:38:47…谢谢。这个解决方案对我来说已经足够了。感谢您的解释,我会考虑使用它而不是其他语法(“两个月…”)。你说的有道理。谢谢您的添加。@gabriel.Oliveira:一般来说,除非我们讨论的是与UTC不同的POSIX时间(如您的问题所暗示的)。因此,“天+秒+微秒”与“月+天”一样有意义,也就是说,如果你可以忽略86400和86401(百万微秒)或28和31(三天)之间的差异(在你的特殊情况下),你可以使用它们。如果你知道(按照惯例),你可以说“两个月三天”指两个特定日期之间的差异(实际上可以是81到84天之间的任何时间),例如,所需日期和纪元开始之间的差异。