Rust标准库(时间)

时间库常见的对象

  • Duration:代表时间跨度的类型,通常的用法是超时统计。
  • Instant:纳秒单位的时钟。
  • SystemTime:系统时钟。
  • SystemTimeErro:系统时钟错误。
  • TryFromFloatSecsError:转换浮点数为Duration时的报错。

Duration时间

  • Duration = Duration::new(u64::MAX, NANOS_PER_SEC - 1):获取最大时间Duration。
  • fn new(secs: u64, nanos: u32) -> Duration:创建一个特定值的Duration。
  • fn from_secs(secs: u64) -> Duration:创建特定秒数的Duration。
  • from_millis(millis: u64) -> Duration:创建特定毫秒数的Duration。
  • from_micros(micros: u64) -> Duration:指定特定微妙数的Duration。
  • from_nanos(nanos: u64) -> Duration:创建特定纳秒数的Duration。
  • is_zero(&self) -> bool:返回Duration是否为0。
  • as_secs(&self) -> u64:转换Duration为秒数。
  • subsec_millis(&self) -> u32:转换除去首位后剩余部分为毫秒数,比如4.321秒,输出为321。
  • subsec_micros(&self) -> u32:转换为微秒单位后除去首位之后的微秒数,比如1.234567s,输出234567。
  • fn as_millis(&self) -> u128:转换为纳秒单位后取出首位之后剩余的纳秒数,比如1001000123。
  • fn subsec_nanos(&self) -> u32:转换为纳秒单位后,原先小数部分转换为纳秒单位。
  • as_millis(&self) -> u128:返回单位为微妙数后小数部分转换为微秒数。
  • as_micros(&self) -> u128:返回小数部分转换为毫秒之后的数值。
  • as_nanos(&self) -> u128:转换小数部分为纳米之后的数值。
  • checked_add(self, rhs: Duration) -> Option<Duration>:检查加法,如果饱和值溢出则返回None否则返回计算值。
  • saturating_add(self, rhs: Duration) -> Duration:饱和值加法,如果溢出则返回饱和值。
  • checked_sub(self, rhs: Duration) -> Option<Duration>:检查减法,如果溢出则返回None否则返回计算值。
  • saturating_sub(self, rhs: Duration) -> Duration:饱和值减法,如果溢出则返回饱和值否则返回计算值。
  • checked_mul(self, rhs: u32) -> Option<Duration>:饱和值乘法,如果溢出则返回None否则返回计算值。
  • saturating_mul(self, rhs: u32) -> Duration:饱和值乘法,如果语出则返回饱和值否则返回计算值。
  • checked_div(self, rhs: u32) -> Option<Duration>:检查除法,如果被除数为0则返回None,否则返回计算值。
  • as_secs_f64(&self) -> f64:返回Duration包含的秒数,fp64输出。
  • as_secs_f32(&self) -> f32:返回Duration包含的秒数,fp32输出。
  • from_secs_f64(secs: f64) -> Duration:从fp64秒构建Duration。
  • from_secs_f32(secs: f32) -> Duration:从fp32秒构建Duration。
  • mul_f64(self, rhs: f64) -> Duration:Duration乘以rhs(fp32)返回Duration。
  • mul_f32(self, rhs: f32) -> Duration:Duration乘以rhs(fp64)返回Duration。
  • div_f64(self, rhs: f64) -> Duration:Duration除以rhs(fp64)返回Duration。
  • div_f32(self, rhs: f32) -> Duration:Duration除以rhs(fp32)返回Duration。
  • div_duration_f64(self, rhs: Duration) -> f64:Duration除以另一个Durationrhs返回f64结果(实验接口)。
  • div_duration_f32(self, rhs: Duration) -> f32:Duration除以另一个Durationrhs返回f32结果(实验接口)。
  • try_from_secs_f32(secs: f32) -> Result<Duration, TryFromFloatSecsError>:from_secs_f32的检查版本,如果secs为负数、溢出或则无限则返回Err。
  • try_from_secs_f64(secs: f64) -> Result<Duration, TryFromFloatSecsError>:from_secs_f64的检查版本,如果secs为负数、溢出或者无限则返回Err。
use std::time::Duration;
fn main() {
    let five_second = Duration::from_secs(5);
    let five_nanosecond = Duration::from_nanos(5);
    println!(
        "5 second = {:?} 5 nano second = {:?}",
        five_second, five_nanosecond
    );
    assert_eq!(Duration::MAX, Duration::new(u64::MAX, 1000_000_000 - 1));
    let five_second_new = Duration::new(5, 0);
    let five_mili = Duration::from_millis(5);
    println!(
        "acc time = {:?} five 毫秒 = {:?}",
        five_second_new, five_mili
    );
    assert!(Duration::new(0, 0).is_zero());
    assert!(Duration::new(5, 100).as_secs() == 5);
    assert!(Duration::from_millis(5432).subsec_millis() == 432);
    assert_eq!(Duration::from_millis(5010).subsec_nanos(), 1000_000_0);
}

Instant

常见方法

  • now() -> Instant:返回一个对应当前的Instant。
  • duration_since(&self, earlier: Instant) -> Duration:返回相对一另一个Instant流失了多少时间的Duration,如果当前Instant晚于另一个时间则返回0。
  • checked_duration_since(&self, earlier: Instant) -> Option<Duration>:检查版本的duration_since,monotonicity bugs将导致结果为None。
  • saturating_duration_since(&self, earlier: Instant) -> Duration:返回Instant相较于另一个Instant流失的时间,如果当前Instant晚于另一个时间则返回0。
  • elapsed(&self) -> Duration:返回流失了多少时间。
  • checked_add(&self, duration: Duration) -> Option<Instant>:返回当前Instant+Instant之后的结果(越界则为None)。
  • checked_sub(&self, duration: Duration) -> Option<Instant>:返回当前Instant-Instan之后的结果(越界则为None)。

SystemTime

系统时钟,linux下精确到纳秒,windows下精确到100纳秒。常见成员和方法:

  • UNIX_EPOCH:获取系统时钟。这个常量定义为:在所有的系统上1970-01-01 00:00:00 UTC时间戳。
  • now():返回对应当前的系统时钟。
  • duration_since(&self,earlier: SystemTime) -> Result<Duration, SystemTimeError>:返回相比earlier时间点流失了多少时间。
  • elapsed(&self) -> Result<Duration, SystemTimeError>:返回自now开始到现在流失了多少时间。
  • checked_add(&self, duration: Duration) -> Option<SystemTime>:返回self+duration之后的时间,如果值没有越界则返回Some包装之后的时间,否则为None。
  • checked_sub(&self, duration: Duration) -> Option<SystemTime>:返回self-duration之后的时间,如果没有越界则返回Some包装之后的时间否则为None。

SystemTimeError

duration_sinceelapse方法返回的错误,常见方法duration用来计算反向消耗时间(产生此错误主要是起点比终点晚,反向计算就能得到时间差)。

TryFromFloatSecsError

转换一个浮点的秒数为Duration产生的错误。通常是Duration::try_from_secs_f32Duration::try_from_secs_f64返回的错误。


   转载规则


《Rust标准库(时间)》 bleedingfight 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Rust三方库-actix-进阶 Rust三方库-actix-进阶
错误Actix Web 使用自己的actix_web::error::Error类型和actix_web::error::ResponseError trait 来处理来自 Web handler的错误。如果处理程序在也实现了Respons
2023-09-16
下一篇 
  目录