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),其中 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)

recently added

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

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

执行转换。

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

执行转换。