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)
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),其中 t 是 self + duration 的时间,否则返回 None。

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

Trait Implementations

Panics

如果结果时间点不能由基础数据结构体表示,则此函数可能为 panic。 没有 panic 的版本,请参见 SystemTime::checked_add。

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

执行 += 操作。 Read more

返回值的副本。 Read more

从 source 执行复制分配。 Read more

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

将该值输入给定的 Hasher。 Read more

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

此方法返回 self 和 other 之间的 Ordering。 Read more

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

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

将值限制为一定的时间间隔。 Read more

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

此方法测试 !=。

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

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

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

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

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

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

执行 - 操作。 Read more

执行 -= 操作。 Read more

Auto Trait Implementations

Blanket Implementations

获取 self 的 TypeId。 Read more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

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

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

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

recently added

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

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

执行转换。

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

执行转换。