Преобразование поплавок чч: мм

Обновить

December 2018

Просмотры

9.9k раз

1

Я хочу напечатать значение с плавающей точкой я получил после того, как делать некоторую математику в виде строки в формате чч: мм. В настоящее время у меня есть: (время в данном случае равно поплавок, как 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]

В любом случае, для достижения этого эффекта последовательно? С более продвинутых входами мой выше код не работает должным образом, и выводит неправильное время.

4 ответы

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")

(Это использует случайно выбрал дату, чтобы получить время дельта в DateTime для использования)

5

В качестве альтернативы использованию datetime, вы можете просто использовать простое форматирование с небольшим количеством математики, например:

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

Использование datetime.timedelta:

>>> 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'
1

Использование 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)