Конвертор времени. Преобразование Дней, Часов, Минут и/или Секунд в последовательный временной отрезок, Time Convertor. Transform Days, Hours, Minutes and Seconds to normal TimeLine
Узнать, сколько 135 секунд в часах довольно легко - это одна операция. Наоборот — тоже А вот, что действительно непросто - так это узнать сколько Часов, Минут и Секунд (Дней - понятно сколько) составляет 1.90909 дня И не каждый параметр в отдельности, а все вместе — в виде "нормального" временного отрезка
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ссылка (ПРЕОБР для локали) тут, может, будет и не лишняя, однако попробуй с помощью неё получить результат, как в примере Задачи всё-таки довольно разные, т.к. ПРОБР это конвертация из одной в ОДНУ ДРУГУЮ (как раз об этом — в 1ой строке под спойлером "Зачем"), а моя - про построение временной цепочки
Честно, говоря, у меня твёрдая 5ка по физике и математике и в ПРЕОБР не вижу никакой пользы (для себя)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
сделаю все 3 функции текстовыми - в массиве нет толку, я подумал Некорректно сравнивать вызов функции с "прямым" кодом (не говоря уже о том, что у тебя только 1 аргумент) — я сделаю равнозначный тест
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
1. Все 3 варианта примерно равны по скорости 2. Format быстрее всех, зато Math не округляет секунды, поэтому получает более точный ответ (второй по скорости) 3. Оставляю Math
Код
Код
Option Explicit
Option Private Module
'====================================================================================================
Sub Test()
Dim x, t!, n&
t = Timer
For n = 1 To 1000000
x = TimeConvertMath(1.90909)
Next n
Debug.Print "Time: " & Timer - t, x
End Sub
'====================================================================================================
Function TimeConvertFormat(Optional iDays#) As String
Dim d#
d = Fix(iDays): TimeConvertFormat = "Days: " & d & Format(iDays - d, """ | Hours: ""h"" | Minutes: ""m"" | Seconds: ""s")
End Function
'====================================================================================================
Function TimeConvert(Optional iDays#) As String
TimeConvert = "Days: " & Fix(iDays) & " | Hours: " & Hour(iDays) & " | Minutes: " & Minute(iDays) & " | Seconds: " & Second(iDays)
End Function
'====================================================================================================
Function TimeConvertMath(Optional iDays#) As String
Dim t2#, d&, h&, m&, s#
d = Fix(iDays): t2 = (iDays - d) * 24
h = Fix(t2): t2 = (t2 - h) * 60
m = Fix(t2): s = (t2 - m) * 60
TimeConvertMath = "Days: " & d & " | Hours: " & h & " | Minutes: " & m & " | Seconds: " & s
End Function
'====================================================================================================
Окончательный вариант функции
Код
Option Explicit
Option Private Module
'====================================================================================================
Sub Test()
Dim x, t!, n&
t = Timer
For n = 1 To 1000000
x = TimeConvertMath(1.90909, 585)
Next n
Debug.Print "Time: " & Timer - t, x
End Sub
'====================================================================================================
Function TimeConvertMath(Optional iDays#, Optional iHours#, Optional iMinutes#, Optional iSeconds#) As String
Dim t#, t2#, d&, h&, m&
t = iDays + iHours / 24 + iMinutes / 1440 + iSeconds / 86400
d = Fix(t): t2 = (t - d) * 24
h = Fix(t2): t2 = (t2 - h) * 60
m = Fix(t2)
TimeConvertMath = "Days: " & d & " | Hours: " & h & " | Minutes: " & m & " | Seconds: " & Round((t2 - m) * 60, 4)
End Function
'====================================================================================================
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄