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) |
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
此方法测试 !=
。
type Output = SystemTime
type Output = SystemTime
应用 -
运算符后的结果类型。
执行 -
操作。 Read more
执行 -=
操作。 Read more