| 258bb382 Andy McCall ↶ |
1 |
|
| 2 |
|
| 3 |
pub fn when(ms: u64) -> String { |
| 4 |
let secs = (ms / 1000) as i64; |
| 5 |
let days = secs.div_euclid(86_400); |
| 6 |
let rem = secs.rem_euclid(86_400); |
| 7 |
|
| 8 |
let z = days + 719_468; |
| 9 |
let era = z.div_euclid(146_097); |
| 10 |
let doe = z - era * 146_097; |
| 11 |
let yoe = (doe - doe / 1460 + doe / 36_524 - doe / 146_096) / 365; |
| 12 |
let y = yoe + era * 400; |
| 13 |
let doy = doe - (365 * yoe + yoe / 4 - yoe / 100); |
| 14 |
let mp = (5 * doy + 2) / 153; |
| 15 |
let d = doy - (153 * mp + 2) / 5 + 1; |
| 16 |
let m = if mp < 10 { mp + 3 } else { mp - 9 }; |
| 17 |
let y = if m <= 2 { y + 1 } else { y }; |
| 18 |
format!("{y:04}-{m:02}-{d:02} {:02}:{:02}:{:02}Z", rem / 3600, (rem % 3600) / 60, rem % 60) |
| 19 |
} |