Struct std::time::SystemTime 1.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()
获取当前时间:
Platform | System call |
---|---|
SGX | insecure_time usercall. More information on timekeeping in SGX |
UNIX | clock_gettime (Realtime Clock) |
Darwin | gettimeofday |
VXWorks | clock_gettime (Realtime Clock) |
SOLID | SOLID_RTC_ReadTime |
WASI | __wasi_clock_time_get (Realtime Clock) |
Windows | GetSystemTimePreciseAsFileTime / 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返回从较早的时间点过去的时间量。
此函数可能会失败,因为不能保证早先进行的测量总是在以后进行之前 (由于异常,例如向前或向后调整系统时钟)。
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
。
type Output = SystemTime
type Output = SystemTime
应用 +
运算符后的结果类型。
执行 +=
操作。 Read more
此方法测试 self
和 other
值是否相等,并由 ==
使用。 Read more
此方法测试 !=
。
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more
type Output = SystemTime
type Output = SystemTime
应用 -
运算符后的结果类型。
执行 -
操作。 Read more
执行 -=
操作。 Read more