Idiom #368 Parse a millisecond value
Parse the millisecond value a, to a collection of duration values, m.
For example, `1,000,000 ms` is `{min=16, sec=40}`.
https://en.wikipedia.org/wiki/Gregorian_calendar
https://en.wikipedia.org/wiki/Time
enum Unit {
ms(1), s(1_000 * ms.x), m(60 * s.x),
h(60 * m.x), d(24 * h.x),
y(365.2425 * d.x);
double x;
Unit(double x) { this.x = x; }
static Map<Unit, Integer> parse(long ms) {
Map m = new LinkedHashMap<>();
double x = ms, y;
for (Unit u : of(values()).reversed())
if (x >= (y = u.x)) {
m.put(u, (int) (x / y));
x = x % y;
}
return m;
}
}
Map<Unit, Integer> m = Unit.parse(a);