在Python中将十进制时间(HH.HHH)转换为HH:MM:SS

时间:2015-08-19 05:30:32

标签: python datetime

我有几个小时的格式:

72.345, 72.629, 71.327, ...

作为在python中执行计算的结果。似乎将这些转换为HH:MM:SS格式的最简单方法是使用这样的日期时间模块:

time = str(datetime.timedelta(seconds = 72.345*3600))

但是,这会返回带有天数的值,这是我不想要的:

'3 days, 0:20:42'

这是我的大脑提出我想要的最终价值的最佳方式:

str(int(math.floor(time))) + ':' + str(int((time%(math.floor(time)))*60)) + ':' + str(int(((time%(math.floor(time)))*60) % math.floor(((time%(math.floor(time)))*60))*60))

这是非常漫长的,可能是不必要的。但它确实给了我想要的答案:

'72:20:41'

有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

您不必使用datetime,您可以轻松计算小数时间内的小时,分​​钟和秒数。

您还应该注意到,您可以使用字符串格式,这比字符串连接更容易使用。

time = 72.345

hours = int(time)
minutes = (time*60) % 60
seconds = (time*3600) % 60

print("%d:%02d.%02d" % (hours, minutes, seconds))
>> 72:20:42

答案 1 :(得分:1)

如果你想让它看起来更容易一点,你可以随时提出:

Time = 72.345

Hours = Time
Minutes = 60 * (Hours % 1)
Seconds = 60 * (Minutes % 1)

print("%d:%02d:%02d" % (Hours, Minutes, Seconds))

将%d放入字符串中将为您截断任何小数。

答案 2 :(得分:1)

在此处复制问题Python Time Seconds to h:m:s的最佳答案,因为在我看来,以下使用divmod和元组分配是如此令人愉快。

hours = 72.345
seconds = hours * 3600
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print "%d:%02d:%02d" % (h, m, s)

答案 3 :(得分:-1)

功能方法

首先定义一个帮助frac方法,该方法与math.modf

在某种程度上相同
>>> def frac(n):
...     i = int(n)
...     f = round((n - int(n)), 4)
...     return (i, f)
... 
>>> frac(53.45)
(53, 0.45) #a tuple

然后是格式化小时十进制的函数

>>> def frmt(hour): #you can rewrite it with while if you wish
...     hours, _min = frac(hour)
...     minutes, _sec = frac(_min*60)
...     seconds, _msec = frac(_sec*60)
...     return "%s:%s:%s"%(hours, minutes, seconds)
... 
>>> frmt(72.345)
'72:20:42'
>>> l = [72.345, 72.629, 71.327]
>>> map(frmt, l)
['72:20:42', '72:37:44', '71:19:37']