Метод 1:
Этот код следует за ответом Брэндона Родса в Python по ссылке в оригинальном вопросе.Он отвечает на исходный вопрос.
Преимущество : Простота.
Недостаток : Для длинных прогонов симуляции вывод не будет отформатирован так хорошо, какметод, данный после этого.
using Printf
start = time()
sleep(65.129) # 65.129 seconds
elapsed = time() - start
(minutes, seconds) = fldmod(elapsed, 60)
(hours, minutes) = fldmod(minutes, 60)
@printf("%02d:%02d:%0.2f", hours, minutes, seconds)
"""========== The expected output is ==========
00:01:5.16
"""
Метод 2 :
@ crstnbr решает аналогичную проблему с функцией canonacalize
.Я не вижу его в документации по Julia 1.0.0, но я нашел его в источнике Julia как связанный здесь .
Он обладает изящным свойством изящной обработки как коротких, так и длинных промежутков времени.периоды времени.
Преимущество : Предоставляет полезный формат для длительного времени.
Недостаток : Похоже, что в текущем Julia 1.0.0 Документация, возможно, будет трудно запомнить.
julia> start = now(); sleep(1.23); elapsed = now() - start;
julia> canonicalize(Dates.CompoundPeriod(elapsed))
1 second, 246 milliseconds
julia> canonicalize(Dates.CompoundPeriod(elapsed*1000000))
2 weeks, 10 hours, 6 minutes, 40 seconds
Если вы проводите длительные симуляции, это может быть полезно.