2017-02-21 71 views
0

我正在Python中使用游泳结果(来自外部xls源代码),我需要将float转换为时间格式 - 分钟,秒和微秒 - 以执行加法和减法操作。 我使用这个功能:如何将float转换为时间格式 - 分,秒和微秒 - 在Python中?

from datetime import timedelta 
def format_result(result): 
    seconds = int(result) 
    microseconds = int((result * 1000000) % 1000000) 
    output = timedelta(0, seconds, microseconds) 
    return output 

当给定的输入为131.39,输出应该是0:02:11.390000但实际上是0:02:11.389999。 如何在没有此精度错误的情况下正确转换?

+4

将它解析为一个字符串而不是一个浮点数 – Falmarri

+0

正在考虑同样的事情@Falmarri – WhatsThePoint

+0

float在这种情况下是a **中的一种痛苦...... –

回答

0

我试过没有将它转换成int,它工作正常,因为你的扩展它给了390000 ....!

from datetime import timedelta 
def format_result(result): 
    seconds = int(result) 
    microseconds = (result * 1000000) % 1000000 
    output = timedelta(0, seconds, microseconds) 
    return output 

print format_result(131.39) 
+0

简单而有效。谢谢。 – jaguas

2

所有你需要做的是将其转换为UTC时间和日期时间format

>>> import datetime 
>>> datetime.datetime.strftime(datetime.datetime.utcfromtimestamp(131.39), "%M:%S:%f") 
'02:11:390000' 

你需要做什么,

import datetime 
def format_result(result): 
    date = datetime.datetime.utcfromtimestamp(result) 
    output = datetime.datetime.strftime(date, "%M:%S:%f") 
    return output 
print format_result(131.39) 

希望这会有所帮助。

+0

@jaguas这是否适合你! –

+0

在我的脚本中,我必须将结果导出到xlsx,因为它不会在Excel中识别为时间格式(mm:ss,00)。在Python中,它是可以的。 – jaguas