Struct std::time::SystemTime
1.8.0 · source · 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特定于平台的行为
SystemTime
的精度可能取决于底层操作系统特定的时间格式。
例如,在 Windows 上,时间以 100 纳秒间隔表示,而 Linux 可以表示纳秒间隔。
以下系统调用是 now()
使用 currently 来找出当前时间:
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§
source§impl SystemTime
impl SystemTime
1.28.0 · sourcepub const UNIX_EPOCH: SystemTime = UNIX_EPOCH
pub const UNIX_EPOCH: SystemTime = UNIX_EPOCH
时间锚,可用于创建新的 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!"),
}
Runsourcepub fn now() -> SystemTime
pub fn now() -> SystemTime
sourcepub fn duration_since(
&self,
earlier: SystemTime
) -> Result<Duration, SystemTimeError>
pub fn duration_since( &self, earlier: SystemTime ) -> Result<Duration, SystemTimeError>
返回从较早的时间点过去的时间量。
此函数可能会失败,因为不能保证早先进行的测量总是在以后进行之前 (由于异常,例如向前或向后调整系统时钟)。
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:?}");
Runsourcepub fn elapsed(&self) -> Result<Duration, SystemTimeError>
pub fn elapsed(&self) -> Result<Duration, SystemTimeError>
返回此系统时间与当前时钟时间的差异。
这个函数可能会失败,因为底层系统时钟容易受到漂移和更新的影响 (例如,系统时钟可能会倒退),所以这个函数可能并不总是成功。
如果成功,则返回 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);
Run1.34.0 · sourcepub fn checked_add(&self, duration: Duration) -> Option<SystemTime>
pub fn checked_add(&self, duration: Duration) -> Option<SystemTime>
如果 t
可以表示为 SystemTime
(表示它在底层数据结构体的边界之内),则返回 Some(t)
,其中 t
是 self + duration
的时间,否则返回 None
。
1.34.0 · sourcepub fn checked_sub(&self, duration: Duration) -> Option<SystemTime>
pub fn checked_sub(&self, duration: Duration) -> Option<SystemTime>
如果 t
可以表示为 SystemTime
(表示它在底层数据结构体的边界之内),则返回 Some(t)
,其中 t
是 self - duration
的时间,否则返回 None
。
Trait Implementations§
source§impl Add<Duration> for SystemTime
impl Add<Duration> for SystemTime
source§fn add(self, dur: Duration) -> SystemTime
fn add(self, dur: Duration) -> SystemTime
Panics
如果生成的时间点无法由底层数据结构表示,则此函数可能出现 panic。
没有 panic 的版本,请参见 SystemTime::checked_add
。
§type Output = SystemTime
type Output = SystemTime
+
运算符后的结果类型。1.9.0 · source§impl AddAssign<Duration> for SystemTime
impl AddAssign<Duration> for SystemTime
source§fn add_assign(&mut self, other: Duration)
fn add_assign(&mut self, other: Duration)
+=
操作。 Read moresource§impl Clone for SystemTime
impl Clone for SystemTime
source§fn clone(&self) -> SystemTime
fn clone(&self) -> SystemTime
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
执行复制分配。 Read moresource§impl Debug for SystemTime
impl Debug for SystemTime
source§impl Hash for SystemTime
impl Hash for SystemTime
source§impl Ord for SystemTime
impl Ord for SystemTime
source§impl PartialEq<SystemTime> for SystemTime
impl PartialEq<SystemTime> for SystemTime
source§impl PartialOrd<SystemTime> for SystemTime
impl PartialOrd<SystemTime> for SystemTime
source§impl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
§type Output = SystemTime
type Output = SystemTime
-
运算符后的结果类型。1.9.0 · source§impl SubAssign<Duration> for SystemTime
impl SubAssign<Duration> for SystemTime
source§fn sub_assign(&mut self, other: Duration)
fn sub_assign(&mut self, other: Duration)
-=
操作。 Read more