Метод checked_sub
Метод checked_sub класса SystemTime
выполняет вычитание заданной длительности
Duration из текущего момента времени.
В отличие от обычного вычитания через оператор
-, данный метод возвращает
Option<SystemTime>: значение
Some при успешном вычитании и
None, если результат оказался бы
меньше минимально допустимого момента времени.
Параметром метод принимает длительность
Duration, которую нужно вычесть.
Синтаксис
SystemTime::checked_sub(&self, duration: Duration) -> Option<SystemTime>
Пример
Давайте получим текущий момент времени и вычтем из него интервал в 10 секунд:
use std::time::{Duration, SystemTime};
fn main()
{
let now = SystemTime::now();
let res = now.checked_sub(Duration::from_secs(10));
match res
{
Some(t) => println!("{:?}", t),
None => println!("underflow"),
}
}
Результат выполнения кода будет содержать момент времени на 10 секунд раньше текущего, например:
SystemTime { tv_sec: 1710000000, tv_nsec: 0 }
Пример
Давайте попробуем вычесть из начального момента
времени UNIX_EPOCH интервал в 1 секунду.
Так как результат оказался бы раньше начала отсчёта,
метод вернёт None:
use std::time::{Duration, SystemTime, UNIX_EPOCH};
fn main()
{
let res = UNIX_EPOCH.checked_sub(Duration::from_secs(1));
match res
{
Some(t) => println!("{:?}", t),
None => println!("none"),
}
}
Результат выполнения кода:
none
Пример
Давайте вычтем из момента времени, полученного
через UNIX_EPOCH плюс 100 секунд,
интервал в 50 секунд и проверим результат:
use std::time::{Duration, SystemTime, UNIX_EPOCH};
fn main()
{
let t = UNIX_EPOCH + Duration::from_secs(100);
let res = t.checked_sub(Duration::from_secs(50));
match res
{
Some(t) => println!("{:?}", t),
None => println!("none"),
}
}
Результат выполнения кода:
SystemTime { tv_sec: 50, tv_nsec: 0 }
Смотрите также
-
класс
SystemTime,
который представляет момент времени -
метод
checked_add,
который прибавляет длительность с проверкой переполнения -
метод
duration_since,
который возвращает разницу между моментами времени -
метод
elapsed,
который возвращает время, прошедшее с момента