use crate::config::VERBOSE;
use chrono::{Local, Timelike, DateTime};
use std::thread::sleep;
use std::time::Duration;
use std::sync::atomic::Ordering;
pub fn minute_sync() -> DateTime<Local> {
let mut now = Local::now();
if now.second() != 0 {
let mut nanos = now.nanosecond();
if nanos < 1000000000 {
nanos = 1000000000 - nanos;
} else {
nanos = 2000000000 - nanos;
}
sleep(Duration::new(59 - now.second() as u64, nanos));
}
now = Local::now();
while now.second() >= 59 {
sleep(Duration::new(1 as u64, 0));
now = Local::now();
}
if now.second() < 30 {
return now;
} else {
if VERBOSE.load(Ordering::Relaxed) {
println!("warning wobbly time {}", now.second());
}
return minute_sync();
}
}
pub fn sleep_sync() -> DateTime<Local>{
let mut now = Local::now();
let mut nanos = now.nanosecond();
if nanos < 1000000000 {
nanos = 1000000000 - nanos;
} else {
nanos = 2000000000 - nanos;
}
sleep(Duration::new(59 - now.second() as u64, nanos));
now = Local::now();
while now.second() >= 59 {
sleep(Duration::new(1, 0));
now = Local::now();
}
if now.second() < 10 {
} else {
if VERBOSE.load(Ordering::Relaxed) {
println!("warning wobbly time {}", now.second());
}
}
now
}
#[cfg(test)]
mod tests {
}