Python 将浮点转换为hh:mm格式

Python 将浮点转换为hh:mm格式,python,date,python-3.x,time,Python,Date,Python 3.x,Time,我想打印一个浮点值,它是在以hh:mm格式作为时间字符串执行一些数学运算后得到的。目前我有9.8888888888886这样的浮动,我希望它在09:50这样的时间。我尝试了以下代码: time = str(time) time = time.split(".") time[1] = float(time[1]) time[1] *= 0.6 time[1] = str(time[1]) 当我打印时,我使用 str(time[0]) + ":" +

我想打印一个浮点值,它是在以hh:mm格式作为时间字符串执行一些数学运算后得到的。目前我有9.8888888888886这样的浮动,我希望它在09:50这样的时间。我尝试了以下代码:

    time = str(time)
    time = time.split(".")
    time[1] = float(time[1])
    time[1] *= 0.6
    time[1] = str(time[1])
当我打印时,我使用

    str(time[0]) + ":" + time[1][:2]
有什么方法可以始终如一地达到这种效果?使用更高级的输入,我的上述代码无法正常工作,并输出错误的时间。

使用:



假设您想将
9.8888888888 6
转换为
09:53
,基于前者是浮点小时,并且您不想担心天数,如果没有库,您可以简单地执行以下操作:

fhours = 9.888888888888886
ihours = int(ihours)
"%02d:%02d" % (ihours,(fhours-ihours)*60)
仅使用数学模块,请尝试

import math
"%02d:%02d" % (fhours,math.modf(fhours)[0]*60)
您可能认为使用
datetime
模块会有所帮助,但实际上有点麻烦。您可以通过传递分数小时来获取timedelta对象:

 import datetime
 td = datetime.timedelta(hours=9.888888888888886)
但将其放入时间对象或日期时间对象中进行格式化是一个棘手的问题,您最终必须执行以下操作

 import datetime
 td = datetime.timedelta(hours=9.888888888888886)
 (datetime.datetime(2000,1,1)+td).strftime("%H:%M")

(使用随机选取的日期将时间增量转换为要使用的日期时间)

除了使用
datetime
,您还可以使用简单的格式和一些数学知识,例如:

result = '{0:02.0f}:{1:02.0f}'.format(*divmod(time * 60, 60))

(这假设时间是非负的。)

使用divmod可以得到除法的余数和商

minutes = 9.888888888888886*60
hours, minutes = divmod(minutes, 60)

print "%02d:%02d"%(hours,minutes)
输出:

09:53
如果您也需要秒数:

seconds = 9.888888888888886*60*60
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)

print "%02d:%02d:%02d"%(hours,minutes,seconds)

对于Python3.7版本,这将成为一个单行程序

x = 9.888888888888886

print (str(datetime.timedelta(hours=x))[:-3])
(此处将打印时间字符串减去最后三个字符。)

结果1:9:53

或者,如果您需要几秒钟:

打印(datetime.timedelta(小时=x))

结果2:9:53:20

最后,如果超过24小时标记,timedelta也会显示增加的日期:

x=39.888888886

结果3:1天,15:53:20


定义“工作不正常”。定义“错误的时间”。如果您想将其设置为HH:MM:SS格式,该怎么办?它不能正确舍入,
time=0.999
变为
00:60
而不是
01:00
seconds = 9.888888888888886*60*60
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)

print "%02d:%02d:%02d"%(hours,minutes,seconds)
x = 9.888888888888886

print (str(datetime.timedelta(hours=x))[:-3])