#server #remote #retrieve #host #time #sync #rtime

rtime_rs

从远程服务器获取当前时间

2个版本

0.1.3 2022年5月11日
0.1.2 2022年5月11日

#26 in #retrieve

MIT 许可证

8KB
154

rtime.rs

license crates.io version documentation

从远程服务器获取当前时间。

它通过从十二个非常受欢迎的主机通过https请求时间戳来实现。一旦它收到至少三个响应,它就选择时间差最小的两个。然后从这两个中选择最旧的一个。最后,它确保时间是单调的。

使用

使用 rtime_rs::now() 获取远程时间。

// Get the current internet time, returns chrono::DateTime<Utc>.
// Fails if the Internet is offline.
let now = rtime_rs::now().unwrap();  

println!("{}", now);

// OUTPUT: 
// 2022-05-11 23:05:49 UTC

保持同步

rtime_rs::now() 会稍微慢一些,通常为200毫秒或更多,因为它必须对三个或更多远程服务器进行往返调用以确定正确的时间。

您可以通过在程序开始时调用 rtime_rs::sync() 来使其像内置的 std::time::SystemTime::now() 一样快。

// Start syncing with the Internet time. Timeouts after 15 seconds when the 
// Internet is offline.
rtime_rs::sync(Duration::from_secs(15)).unwrap(); 

// All following rtime_rs::now() calls will now be quick and without the need
// for checking its result, because they will never fail.
let now = rtime_rs::now().unwrap();  

println!("{}", now);

// OUTPUT:
// 2022-05-11 23:06:52.000072083 UTC

main() 函数顶部调用 rtime_rs::sync() 是一个好主意。

依赖项

~3MB
~79K SLoC