Skip to main content

plot/lib/logic/
tag_time.rs

1use chrono::{Datelike, Local, Timelike};
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub struct TagTime(pub String);
5
6/// Generuje tag czasowy w postaci R<RRRR>W<WW>D<D>H<HH>M<MM>S<SS>T<TT>Q<QQ>
7/// Gdzie T to Tercja (1/60 sekundy), a Q to Qwadra/Kwarta (1/60 tercji).
8pub fn tag_time() -> TagTime {
9	let now = Local::now();
10
11	let r = now.year(); // R: Rok
12	let w = now.iso_week().week(); // W: Tydzień ISO
13	let d = now.weekday().number_from_monday(); // D: Dzień tygodnia (1-7)
14	let h = now.hour(); // H: Godzina
15	let m = now.minute(); // M: Minuta
16	let s = now.second(); // S: Sekunda
17
18	// Pobieramy nanosekundy jako bazę do obliczeń ułamków sekundy (od 0 do
19	// 999_999_999)
20	let nanos = now.nanosecond() as u64;
21
22	// T: Tercja (1/60 sekundy). Zasięg 0-59.
23	let t = (nanos * 60 / 1_000_000_000) as u32;
24
25	// Q: Qwadra (1/60 tercji). Zasięg 0-59.
26	// Najpierw wyliczamy, w której z 3600 kwart ułamka sekundy jesteśmy,
27	// a potem bierzemy modulo 60, by uzyskać kwartę w obrębie bieżącej tercji.
28	let q = ((nanos * 3600 / 1_000_000_000) % 60) as u32;
29
30	TagTime(format!("R{r:04}W{w:02}D{d}H{h:02}M{m:02}S{s:02}T{t:02}Q{q:02}"))
31}
32
33//let date_str = Color::date(&row.modified.format("%Y W%V %a").to_string());
34//let time_str = Color::time(&row.modified.format("%H:%M:%S.%3f").to_string());