Struct std::time::SystemTime1.8.0[][src]

pub struct SystemTime(_);
Expand description

系统时钟的度量,对于与文件系统或其他进程之类的外部实体进行通信很有用。

Instant 类型不同,这次的测量 不是单调的。 这意味着您可以将文件保存到文件系统,然后再将另一个文件保存到文件系统,并且第二个文件的 SystemTime 测量值比第一个文件早。 换句话说,在另一个实时操作之后实时发生的操作可能具有更早的 SystemTime!

因此,比较两个 SystemTime 实例以了解它们之间的持续时间将返回 Result 而不是绝对的 Duration,以指示这种时间漂移可能发生并且需要处理。

尽管无法直接检查 SystemTime,但此模块中提供了 UNIX_EPOCH 常量作为及时了解有关 SystemTime 信息的锚点。 通过从该固定时间点计算持续时间,可以将 SystemTime 转换为人类可读的时间,或者转换为其他字符串表示形式。

SystemTime 结构体的大小可能会因目标操作系统而异。

Example:

use std::time::{Duration, SystemTime};
use std::thread::sleep;

fn main() {
   let now = SystemTime::now();

   // 我们睡了 2 秒钟
   sleep(Duration::new(2, 0));
   match now.elapsed() {
       Ok(elapsed) => {
           // 它打印 '2'
           println!("{}", elapsed.as_secs());
       }
       Err(e) => {
           // 发生错误!
           println!("Error: {:?}", e);
       }
   }
}
Run

底层系统调用

当前,正在使用以下系统调用来使用 now() 获取当前时间:

PlatformSystem call
SGXinsecure_time usercall. More information on timekeeping in SGX
UNIXclock_gettime (Realtime Clock)
Darwingettimeofday
VXWorksclock_gettime (Realtime Clock)
SOLIDSOLID_RTC_ReadTime
WASI__wasi_clock_time_get (Realtime Clock)
WindowsGetSystemTimePreciseAsFileTime / GetSystemTimeAsFileTime

免责声明: 这些系统调用可能会随时间变化。

Note: 如果 add 的数学运算可能是 panic 结构体不能代表新的时间点。

Implementations

时间锚,可用于创建新的 SystemTime 实例或了解 SystemTime 的时间。

相对于系统时钟,此常量在所有系统上均定义为 “1970-01-01 00:00:00 UTC”。 在现有的 SystemTime 实例上使用 duration_since 可以告诉您测量距离该时间点有多远,并且可以使用 UNIX_EPOCH + duration 创建一个 SystemTime 实例来表示另一个固定的时间点。

Examples
use std::time::SystemTime;

match SystemTime::now().duration_since(SystemTime::UNIX_EPOCH) {
    Ok(n) => println!("1970-01-01 00:00:00 UTC was {} seconds ago!", n.as_secs()),
    Err(_) => panic!("SystemTime before UNIX EPOCH!"),
}
Run

返回与 “now” 相对应的系统时间。

Examples
use std::time::SystemTime;

let sys_time = SystemTime::now();
Run

返回从较早的时间点过去的时间量。

此函数可能会失败,因为不能保证早先进行的测量总是在以后进行之前 (由于异常,例如向前或向后调整系统时钟)。

Instant 可用于测量经过的时间,而不会出现这种故障风险。

如果成功,则返回 Ok(Duration),其中持续时间表示从指定测量到此测量所经过的时间。

如果 earlier 晚于 self,则返回 Err,并且该错误包含时间与 self 的距离。

Examples
use std::time::SystemTime;

let sys_time = SystemTime::now();
let new_sys_time = SystemTime::now();
let difference = new_sys_time.duration_since(sys_time)
    .expect("Clock may have gone backwards");
println!("{:?}", difference);
Run

返回创建此系统时间时的时钟时间与当前时钟时间之间的差。

这个函数可能会失败,因为底层系统时钟容易受到漂移和更新的影响 (例如,系统时钟可能会倒退),所以这个函数可能并不总是成功。 如果成功,则返回 Ok(Duration),其中持续时间表示从这次时间测量到当前时间所经过的时间。

为了可靠地测量经过时间,请改用 Instant

如果 self 晚于当前系统时间,则返回 Err,并且错误包含距当前系统时间 self 多远的时间。

Examples
use std::thread::sleep;
use std::time::{Duration, SystemTime};

let sys_time = SystemTime::now();
let one_sec = Duration::from_secs(1);
sleep(one_sec);
assert!(sys_time.elapsed().unwrap() >= one_sec);
Run

如果 t 可以表示为 SystemTime (表示它在底层数据结构体的边界之内),则返回 Some(t),其中 tself + duration 的时间,否则返回 None

如果 t 可以表示为 SystemTime (表示它在底层数据结构体的边界之内),则返回 Some(t),其中 tself - duration 的时间,否则返回 None

Trait Implementations

Panics

如果生成的时间点无法由底层数据结构表示,则此函数可能出现 panic。 没有 panic 的版本,请参见 SystemTime::checked_add

应用 + 运算符后的结果类型。

执行 += 操作。 Read more

返回值的副本。 Read more

source 执行复制分配。 Read more

使用给定的格式化程序格式化该值。 Read more

将该值输入给定的 HasherRead more

将这种类型的切片送入给定的 Hasher 中。 Read more

此方法返回 selfother 之间的 OrderingRead more

比较并返回两个值中的最大值。 Read more

比较并返回两个值中的最小值。 Read more

将值限制在某个时间间隔内。 Read more

此方法测试 selfother 值是否相等,并由 == 使用。 Read more

此方法测试 !=

如果存在,则此方法返回 selfother 值之间的顺序。 Read more

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more

应用 - 运算符后的结果类型。

执行 - 操作。 Read more

执行 -= 操作。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

获得所有权后的结果类型。

从借用的数据创建拥有的数据,通常是通过克隆。 Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into #41263)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。