我想打印一个以hh:mm格式作为字符串进行数学运算后得到的浮点值。目前我有:(在这种情况下的时间等于9.888888888888886或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]
任何方法都能始终如一地达到这种效果吗?使用更高级的输入时,我的上述代码无法正常工作,并输出错误的时间。
答案 0 :(得分:8)
除了使用datetime
之外,你可以使用简单的格式和一些数学,例如:
result = '{0:02.0f}:{1:02.0f}'.format(*divmod(time * 60, 60))
答案 1 :(得分:6)
>>> import datetime
>>> datetime.timedelta(hours=9.888888888888886)
datetime.timedelta(0, 35600)
>>> str(datetime.timedelta(hours=9.888888888888886))
'9:53:20'
>>> str(datetime.timedelta(hours=9.888888888888886)).rsplit(':', 1)[0]
'9:53'
>>> datetime.datetime.combine(datetime.date.today(), datetime.time()) + \
... datetime.timedelta(hours=9.888888888888886)
datetime.datetime(2014, 12, 16, 9, 53, 20)
>>> _.strftime('%H:%M')
'09:53'
答案 2 :(得分:3)
使用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)
答案 3 :(得分:1)
假设您希望将9.888888888888886
转换为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")
(使用随机选择的日期将时间增量转换为要使用的日期时间)
答案 4 :(得分:0)
对于python 3.7版本,这变成了单行代码。
x = 9.888888888888886
print (str(datetime.timedelta(hours=x))[:-3])
(这里是时间字符串减去最后三个字符的输出。)
结果1:9:53
或者,如果您需要秒:
print (datetime.timedelta(hours=x))
结果2:9:53:20
最后,如果您超出24小时标记,则timedelta也会显示添加的日期:
x = 39.888888888888886
结果3-1天,15:53:20