50 lines
1.0 KiB
Rust
50 lines
1.0 KiB
Rust
|
use std::time::{SystemTime,UNIX_EPOCH};
|
||
|
use chrono::{Duration,Datelike};
|
||
|
|
||
|
fn main() {
|
||
|
|
||
|
// DIT
|
||
|
|
||
|
let current_timestamp = SystemTime::now()
|
||
|
.duration_since(UNIX_EPOCH)
|
||
|
.unwrap()
|
||
|
.as_secs_f64();
|
||
|
|
||
|
let current_dit = (current_timestamp - 12.0*3600.0) % 86400.0 / 86400.0;
|
||
|
|
||
|
let deca = (current_dit * 10.0 % 10.0) as u16;
|
||
|
let decim = (current_dit * 1000.0 % 100.0) as u16;
|
||
|
let desec = (current_dit * 100000.0 % 100.0) as u16;
|
||
|
|
||
|
// StarDIT
|
||
|
|
||
|
let date_opt = chrono::Utc::now().checked_add_signed(Duration::hours(-12));
|
||
|
let date = match date_opt {
|
||
|
Some(date) => date,
|
||
|
None => panic!("Time overflow"),
|
||
|
};
|
||
|
|
||
|
let year = date.year() + 10000;
|
||
|
let day = date.ordinal();
|
||
|
|
||
|
let day_name = match day % 10 {
|
||
|
0 => "zéridi",
|
||
|
1 => "unidi",
|
||
|
2 => "duodi",
|
||
|
3 => "tridi",
|
||
|
4 => "quartidi",
|
||
|
5 => "quintidi",
|
||
|
6 => "sextidi",
|
||
|
7 => "septidi",
|
||
|
8 => "octidi",
|
||
|
9 => "nonidi",
|
||
|
_ => "?",
|
||
|
};
|
||
|
|
||
|
let weekade = day / 10;
|
||
|
|
||
|
// Display
|
||
|
println!("{}.{}.{}\n{}, décade {}, {}", deca, format!("{:0>2}", decim), format!("{:0>2}", desec), year, weekade, day_name);
|
||
|
}
|
||
|
|