40 lines
820 B
Rust
40 lines
820 B
Rust
extern crate chrono;
|
|
|
|
pub mod libstardit {
|
|
use chrono::{Datelike, LocalResult, TimeZone};
|
|
|
|
pub struct StarDIT {
|
|
pub year: u16,
|
|
pub weekade: u16,
|
|
pub day_name: String,
|
|
pub day: u16,
|
|
}
|
|
|
|
pub fn unix_to_stardit(unix: f64) -> StarDIT {
|
|
let date = match chrono::Utc.timestamp_millis_opt(((unix as i64) - 12 * 3600) * 1000) {
|
|
LocalResult::Single(date) => date,
|
|
_ => panic!("Incorrect timestamp_millis"),
|
|
};
|
|
let day = date.ordinal() as u16;
|
|
return StarDIT {
|
|
year: (date.year() + 10000) as u16,
|
|
weekade: day / 10,
|
|
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",
|
|
_ => "?",
|
|
}
|
|
.to_string(),
|
|
day: day,
|
|
};
|
|
}
|
|
}
|