/
pretty_time.jl
53 lines (46 loc) 路 1.54 KB
/
pretty_time.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using Printf
using Dates: AbstractTime
maybe_int(t) = isinteger(t) ? Int(t) : t
"""
prettytime(t)
Convert a floating point value `t` representing an amount of time in seconds to a more
human-friendly formatted string with three decimal places. Depending on the value of `t`
the string will be formatted to show `t` in nanoseconds (ns), microseconds (渭s),
milliseconds (ms), seconds, minutes, hours, days, or years.
"""
function prettytime(t)
# Modified from: https://github.com/JuliaCI/BenchmarkTools.jl/blob/master/src/trials.jl
iszero(t) && return "0 seconds"
t = maybe_int(t)
if t < 1e-9
# No point going to picoseconds, just return something readable.
return @sprintf("%.3e seconds", t)
elseif t < 1e-6
value, units = t * 1e9, "ns"
elseif t < 1e-3
value, units = t * 1e6, "渭s"
elseif t < 1
value, units = t * 1e3, "ms"
elseif t < minute
value = t
units = value == 1 ? "second" : "seconds"
elseif t < hour
value = maybe_int(t / minute)
units = value == 1 ? "minute" : "minutes"
elseif t < day
value = maybe_int(t / hour)
units = value == 1 ? "hour" : "hours"
elseif t < year
value = maybe_int(t / day)
units = value == 1 ? "day" : "days"
else
value = maybe_int(t / year)
units = value == 1 ? "year" : "years"
end
if isinteger(value)
return @sprintf("%d %s", value, units)
else
return @sprintf("%.3f %s", value, units)
end
end
prettytime(dt::AbstractTime) = "$dt"