我有几个小时的格式:
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'
有更好的方法吗?
答案 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']