在Python中将十进制时间数(例如23.33154)转换为秒?

时间:2014-01-26 02:04:16

标签: python math time logic data-conversion

我试图将十进制时间数字(例如23.456,0.5555,1.9999等)转换为秒(作为整数)。

我已经创建了一个将小数时间转换为小时和分钟的函数。 例如,转换为小时:

def decimal_to_hours(t)
    return math.floor(t)

然后是小数时间到分钟:

def decimal_to_mins(t)
    if t < 1:
        return math.floor(t * 60)

    if t % 1 == 0:
        return 0

    elif t > 1:
        return math.floor((t - math.floor(t)) * 60) 

所以我的问题是我不知道如何将分数转换为秒。任何帮助都会被贬低。

2 个答案:

答案 0 :(得分:3)

只需转换为秒并执行原始操作:floored modulo。

from math import floor

time_hours = 23.99431
time_minutes = time_hours * 60
time_seconds = time_minutes * 60

hours_part   = floor(time_hours)
minutes_part = floor(time_minutes % 60)
seconds_part = floor(time_seconds % 60)

print("{h}:{m}:{s}".format(h=hours_part, m=minutes_part, s=seconds_part))
#>>> 23:59:39

答案 1 :(得分:2)

def convert_decimal_to_time(decimal):
    values_in_seconds = [('days', 60*60*24), ('hours', 60*60), ('minutes', 60), ('seconds', 1)]
    output_dict = {}
    num_seconds = int(decimal * 3600)
    for unit, worth in values_in_seconds:
        output_dict[unit] = num_seconds // worth
        num_seconds = num_seconds % worth
    return output_dict

convert_decimal_to_time(23.99431)
# {'minutes': 59, 'hours': 23, 'days': 0, 'seconds': 39}
convert_decimal_to_time(2.75)
# {'minutes': 45, 'seconds': 0, 'hours': 2, 'days': 0}
convert_decimal_to_time(252.5)
# {'minutes': 30, 'seconds': 0, 'hours': 12, 'days': 10}