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 来找出当前时间:

免责声明: 这些系统调用可能会随时间变化。

Note: 如果 add 的数学运算可能是 panic 结构体不能代表新的时间点。

Implementations§

source§

impl SystemTime

1.28.0 · source

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!"),
}
Run
source

pub fn now() -> SystemTime

返回与 “now” 相对应的系统时间。

Examples
use std::time::SystemTime;

let sys_time = SystemTime::now();
Run
source

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:?}");
Run
source

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);
Run
1.34.0 · source

pub fn checked_add(&self, duration: Duration) -> Option<SystemTime>

如果 t 可以表示为 SystemTime (表示它在底层数据结构体的边界之内),则返回 Some(t),其中 tself + duration 的时间,否则返回 None

1.34.0 · source

pub fn checked_sub(&self, duration: Duration) -> Option<SystemTime>

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

Trait Implementations§

source§

impl Add<Duration> for SystemTime

source§

fn add(self, dur: Duration) -> SystemTime

Panics

如果生成的时间点无法由底层数据结构表示,则此函数可能出现 panic。 没有 panic 的版本,请参见 SystemTime::checked_add

§

type Output = SystemTime

应用 + 运算符后的结果类型。
1.9.0 · source§

impl AddAssign<Duration> for SystemTime

source§

fn add_assign(&mut self, other: Duration)

执行 += 操作。 Read more
source§

impl Clone for SystemTime

source§

fn clone(&self) -> SystemTime

返回值的副本。 Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for SystemTime

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

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

impl Hash for SystemTime

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

将该值输入给定的 HasherRead more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

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

impl Ord for SystemTime

source§

fn cmp(&self, other: &SystemTime) -> Ordering

此方法返回 selfother 之间的 OrderingRead more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最大值。 Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最小值。 Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

将值限制在某个时间间隔内。 Read more
source§

impl PartialEq<SystemTime> for SystemTime

source§

fn eq(&self, other: &SystemTime) -> bool

此方法测试 selfother 值是否相等,并由 == 使用。
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
source§

impl PartialOrd<SystemTime> for SystemTime

source§

fn partial_cmp(&self, other: &SystemTime) -> Option<Ordering>

如果存在,则此方法返回 selfother 值之间的顺序。 Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

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

impl Sub<Duration> for SystemTime

§

type Output = SystemTime

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

fn sub(self, dur: Duration) -> SystemTime

执行 - 操作。 Read more
1.9.0 · source§

impl SubAssign<Duration> for SystemTime

source§

fn sub_assign(&mut self, other: Duration)

执行 -= 操作。 Read more
source§

impl Copy for SystemTime

source§

impl Eq for SystemTime

source§

impl StructuralEq for SystemTime

source§

impl StructuralPartialEq for SystemTime

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

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

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

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

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

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

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。