pub trait Sub<Rhs = Self> {
    type Output;
    // Required method
    fn sub(self, rhs: Rhs) -> Self::Output;
}Expand description
The subtraction operator -.
Note that Rhs is Self by default, but this is not mandatory. For
example, std::time::SystemTime implements Sub<Duration>, which permits
operations of the form SystemTime = SystemTime - Duration.
§Examples
§Subtractable points
use std::ops::Sub;
#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
    x: i32,
    y: i32,
}
impl Sub for Point {
    type Output = Self;
    fn sub(self, other: Self) -> Self::Output {
        Self {
            x: self.x - other.x,
            y: self.y - other.y,
        }
    }
}
assert_eq!(Point { x: 3, y: 3 } - Point { x: 2, y: 3 },
           Point { x: 1, y: 0 });§Implementing Sub with generics
Here is an example of the same Point struct implementing the Sub trait
using generics.
use std::ops::Sub;
#[derive(Debug, PartialEq)]
struct Point<T> {
    x: T,
    y: T,
}
// Notice that the implementation uses the associated type `Output`.
impl<T: Sub<Output = T>> Sub for Point<T> {
    type Output = Self;
    fn sub(self, other: Self) -> Self::Output {
        Point {
            x: self.x - other.x,
            y: self.y - other.y,
        }
    }
}
assert_eq!(Point { x: 2, y: 3 } - Point { x: 1, y: 0 },
           Point { x: 1, y: 3 });Required Associated Types§
Required Methods§
Implementors§
Source§impl Sub for nix::fcntl::FallocateFlags
 
impl Sub for nix::fcntl::FallocateFlags
type Output = FallocateFlags
Source§impl Sub for nix::fcntl::FallocateFlags
 
impl Sub for nix::fcntl::FallocateFlags
type Output = FallocateFlags
Source§impl Sub for nix::fcntl::RenameFlags
 
impl Sub for nix::fcntl::RenameFlags
type Output = RenameFlags
Source§impl Sub for nix::fcntl::RenameFlags
 
impl Sub for nix::fcntl::RenameFlags
type Output = RenameFlags
Source§impl Sub for nix::fcntl::ResolveFlag
 
impl Sub for nix::fcntl::ResolveFlag
type Output = ResolveFlag
Source§impl Sub for nix::fcntl::ResolveFlag
 
impl Sub for nix::fcntl::ResolveFlag
type Output = ResolveFlag
Source§impl Sub for PosixSpawnFlags
 
impl Sub for PosixSpawnFlags
type Output = PosixSpawnFlags
Source§impl Sub for MemFdCreateFlag
 
impl Sub for MemFdCreateFlag
type Output = MemFdCreateFlag
Source§impl Sub for ControlFlags
 
impl Sub for ControlFlags
type Output = ControlFlags
Source§impl Sub for InputFlags
 
impl Sub for InputFlags
type Output = InputFlags
Source§impl Sub for LocalFlags
 
impl Sub for LocalFlags
type Output = LocalFlags
Source§impl Sub for OutputFlags
 
impl Sub for OutputFlags
type Output = OutputFlags
Source§impl Sub for nix::sys::wait::WaitPidFlag
 
impl Sub for nix::sys::wait::WaitPidFlag
type Output = WaitPidFlag
Source§impl Sub for nix::sys::wait::WaitPidFlag
 
impl Sub for nix::sys::wait::WaitPidFlag
type Output = WaitPidFlag
Source§impl Sub for nix::unistd::AccessFlags
 
impl Sub for nix::unistd::AccessFlags
type Output = AccessFlags
Source§impl Sub for nix::unistd::AccessFlags
 
impl Sub for nix::unistd::AccessFlags
type Output = AccessFlags
Source§impl Sub for CipherCtxFlags
 
impl Sub for CipherCtxFlags
type Output = CipherCtxFlags
Source§impl Sub for CMSOptions
 
impl Sub for CMSOptions
type Output = CMSOptions
Source§impl Sub for Pkcs7Flags
 
impl Sub for Pkcs7Flags
type Output = Pkcs7Flags
Source§impl Sub for ExtensionContext
 
impl Sub for ExtensionContext
type Output = ExtensionContext
Source§impl Sub for ShutdownState
 
impl Sub for ShutdownState
type Output = ShutdownState
Source§impl Sub for SslOptions
 
impl Sub for SslOptions
type Output = SslOptions
Source§impl Sub for SslSessionCacheMode
 
impl Sub for SslSessionCacheMode
type Output = SslSessionCacheMode
Source§impl Sub for SslVerifyMode
 
impl Sub for SslVerifyMode
type Output = SslVerifyMode
Source§impl Sub for X509CheckFlags
 
impl Sub for X509CheckFlags
type Output = X509CheckFlags
Source§impl Sub for X509VerifyFlags
 
impl Sub for X509VerifyFlags
type Output = X509VerifyFlags
Source§impl Sub for rustix::backend::fs::inotify::CreateFlags
 
impl Sub for rustix::backend::fs::inotify::CreateFlags
type Output = CreateFlags
Source§impl Sub for rustix::backend::fs::inotify::CreateFlags
 
impl Sub for rustix::backend::fs::inotify::CreateFlags
type Output = CreateFlags
Source§impl Sub for rustix::backend::fs::inotify::WatchFlags
 
impl Sub for rustix::backend::fs::inotify::WatchFlags
type Output = WatchFlags
Source§impl Sub for rustix::backend::fs::inotify::WatchFlags
 
impl Sub for rustix::backend::fs::inotify::WatchFlags
type Output = WatchFlags
Source§impl Sub for rustix::backend::fs::types::FallocateFlags
 
impl Sub for rustix::backend::fs::types::FallocateFlags
type Output = FallocateFlags
Source§impl Sub for rustix::backend::fs::types::FallocateFlags
 
impl Sub for rustix::backend::fs::types::FallocateFlags
type Output = FallocateFlags
Source§impl Sub for rustix::backend::fs::types::MemfdFlags
 
impl Sub for rustix::backend::fs::types::MemfdFlags
type Output = MemfdFlags
Source§impl Sub for rustix::backend::fs::types::MemfdFlags
 
impl Sub for rustix::backend::fs::types::MemfdFlags
type Output = MemfdFlags
Source§impl Sub for rustix::backend::fs::types::RenameFlags
 
impl Sub for rustix::backend::fs::types::RenameFlags
type Output = RenameFlags
Source§impl Sub for rustix::backend::fs::types::RenameFlags
 
impl Sub for rustix::backend::fs::types::RenameFlags
type Output = RenameFlags
Source§impl Sub for rustix::backend::fs::types::ResolveFlags
 
impl Sub for rustix::backend::fs::types::ResolveFlags
type Output = ResolveFlags
Source§impl Sub for rustix::backend::fs::types::ResolveFlags
 
impl Sub for rustix::backend::fs::types::ResolveFlags
type Output = ResolveFlags
Source§impl Sub for rustix::backend::fs::types::StatVfsMountFlags
 
impl Sub for rustix::backend::fs::types::StatVfsMountFlags
type Output = StatVfsMountFlags
Source§impl Sub for rustix::backend::fs::types::StatVfsMountFlags
 
impl Sub for rustix::backend::fs::types::StatVfsMountFlags
type Output = StatVfsMountFlags
Source§impl Sub for rustix::backend::fs::types::StatxFlags
 
impl Sub for rustix::backend::fs::types::StatxFlags
type Output = StatxFlags
Source§impl Sub for rustix::backend::io::types::ReadWriteFlags
 
impl Sub for rustix::backend::io::types::ReadWriteFlags
type Output = ReadWriteFlags
Source§impl Sub for rustix::backend::io::types::ReadWriteFlags
 
impl Sub for rustix::backend::io::types::ReadWriteFlags
type Output = ReadWriteFlags
Source§impl Sub for MountFlags
 
impl Sub for MountFlags
type Output = MountFlags
Source§impl Sub for MountPropagationFlags
 
impl Sub for MountPropagationFlags
Source§impl Sub for UnmountFlags
 
impl Sub for UnmountFlags
type Output = UnmountFlags
Source§impl Sub for StatxAttributes
 
impl Sub for StatxAttributes
type Output = StatxAttributes
Source§impl Sub for rustix::fs::statx::StatxFlags
 
impl Sub for rustix::fs::statx::StatxFlags
type Output = StatxFlags
Source§impl Sub for rustix::fs::xattr::XattrFlags
 
impl Sub for rustix::fs::xattr::XattrFlags
type Output = XattrFlags
Source§impl Sub for rustix::fs::xattr::XattrFlags
 
impl Sub for rustix::fs::xattr::XattrFlags
type Output = XattrFlags
Source§impl Sub for CodegenConfig
 
impl Sub for CodegenConfig
type Output = CodegenConfig
Source§impl Sub for NaiveDate
Subtracts another NaiveDate from the current date.
Returns a TimeDelta of integral numbers.
 
impl Sub for NaiveDate
Subtracts another NaiveDate from the current date.
Returns a TimeDelta of integral numbers.
This does not overflow or underflow at all,
as all possible output fits in the range of TimeDelta.
The implementation is a wrapper around
NaiveDate::signed_duration_since.
§Example
use chrono::{NaiveDate, TimeDelta};
let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2014, 1, 1), TimeDelta::zero());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 12, 31), TimeDelta::try_days(1).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2014, 1, 2), TimeDelta::try_days(-1).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 9, 23), TimeDelta::try_days(100).unwrap());
assert_eq!(from_ymd(2014, 1, 1) - from_ymd(2013, 1, 1), TimeDelta::try_days(365).unwrap());
assert_eq!(
    from_ymd(2014, 1, 1) - from_ymd(2010, 1, 1),
    TimeDelta::try_days(365 * 4 + 1).unwrap()
);
assert_eq!(
    from_ymd(2014, 1, 1) - from_ymd(1614, 1, 1),
    TimeDelta::try_days(365 * 400 + 97).unwrap()
);Source§impl Sub for NaiveDateTime
Subtracts another NaiveDateTime from the current date and time.
This does not overflow or underflow at all.
 
impl Sub for NaiveDateTime
Subtracts another NaiveDateTime from the current date and time.
This does not overflow or underflow at all.
As a part of Chrono’s leap second handling,
the subtraction assumes that there is no leap second ever,
except when any of the NaiveDateTimes themselves represents a leap second
in which case the assumption becomes that
there are exactly one (or two) leap second(s) ever.
The implementation is a wrapper around NaiveDateTime::signed_duration_since.
§Example
use chrono::{NaiveDate, TimeDelta};
let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();
let d = from_ymd(2016, 7, 8);
assert_eq!(
    d.and_hms_opt(3, 5, 7).unwrap() - d.and_hms_opt(2, 4, 6).unwrap(),
    TimeDelta::try_seconds(3600 + 60 + 1).unwrap()
);
// July 8 is 190th day in the year 2016
let d0 = from_ymd(2016, 1, 1);
assert_eq!(
    d.and_hms_milli_opt(0, 7, 6, 500).unwrap() - d0.and_hms_opt(0, 0, 0).unwrap(),
    TimeDelta::try_seconds(189 * 86_400 + 7 * 60 + 6).unwrap()
        + TimeDelta::try_milliseconds(500).unwrap()
);Leap seconds are handled, but the subtraction assumes that no other leap seconds happened.
let leap = from_ymd(2015, 6, 30).and_hms_milli_opt(23, 59, 59, 1_500).unwrap();
assert_eq!(
    leap - from_ymd(2015, 6, 30).and_hms_opt(23, 0, 0).unwrap(),
    TimeDelta::try_seconds(3600).unwrap() + TimeDelta::try_milliseconds(500).unwrap()
);
assert_eq!(
    from_ymd(2015, 7, 1).and_hms_opt(1, 0, 0).unwrap() - leap,
    TimeDelta::try_seconds(3600).unwrap() - TimeDelta::try_milliseconds(500).unwrap()
);Source§impl Sub for NaiveTime
Subtracts another NaiveTime from the current time.
Returns a TimeDelta within +/- 1 day.
This does not overflow or underflow at all.
 
impl Sub for NaiveTime
Subtracts another NaiveTime from the current time.
Returns a TimeDelta within +/- 1 day.
This does not overflow or underflow at all.
As a part of Chrono’s leap second handling,
the subtraction assumes that there is no leap second ever,
except when any of the NaiveTimes themselves represents a leap second
in which case the assumption becomes that
there are exactly one (or two) leap second(s) ever.
The implementation is a wrapper around
NaiveTime::signed_duration_since.
§Example
use chrono::{NaiveTime, TimeDelta};
let from_hmsm = |h, m, s, milli| NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap();
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 900), TimeDelta::zero());
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 875),
    TimeDelta::try_milliseconds(25).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 6, 925),
    TimeDelta::try_milliseconds(975).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 0, 900),
    TimeDelta::try_seconds(7).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(3, 0, 7, 900),
    TimeDelta::try_seconds(5 * 60).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(0, 5, 7, 900),
    TimeDelta::try_seconds(3 * 3600).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(4, 5, 7, 900),
    TimeDelta::try_seconds(-3600).unwrap()
);
assert_eq!(
    from_hmsm(3, 5, 7, 900) - from_hmsm(2, 4, 6, 800),
    TimeDelta::try_seconds(3600 + 60 + 1).unwrap() + TimeDelta::try_milliseconds(100).unwrap()
);Leap seconds are handled, but the subtraction assumes that there were no other leap seconds happened.
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 59, 0), TimeDelta::try_seconds(1).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_500) - from_hmsm(3, 0, 59, 0),
           TimeDelta::try_milliseconds(1500).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 0, 0), TimeDelta::try_seconds(60).unwrap());
assert_eq!(from_hmsm(3, 0, 0, 0) - from_hmsm(2, 59, 59, 1_000), TimeDelta::try_seconds(1).unwrap());
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(2, 59, 59, 1_000),
           TimeDelta::try_seconds(61).unwrap());Source§impl Sub for Effects
§Examples
let effects = (anstyle::Effects::BOLD | anstyle::Effects::UNDERLINE) - anstyle::Effects::BOLD;
assert_eq!(format!("{:?}", effects), "Effects(UNDERLINE)");
 
impl Sub for Effects
§Examples
let effects = (anstyle::Effects::BOLD | anstyle::Effects::UNDERLINE) - anstyle::Effects::BOLD;
assert_eq!(format!("{:?}", effects), "Effects(UNDERLINE)");1.74.0 · Source§impl Sub for Saturating<i8>
 
impl Sub for Saturating<i8>
type Output = Saturating<i8>
1.74.0 · Source§impl Sub for Saturating<i16>
 
impl Sub for Saturating<i16>
type Output = Saturating<i16>
1.74.0 · Source§impl Sub for Saturating<i32>
 
impl Sub for Saturating<i32>
type Output = Saturating<i32>
1.74.0 · Source§impl Sub for Saturating<i64>
 
impl Sub for Saturating<i64>
type Output = Saturating<i64>
1.74.0 · Source§impl Sub for Saturating<i128>
 
impl Sub for Saturating<i128>
type Output = Saturating<i128>
1.74.0 · Source§impl Sub for Saturating<isize>
 
impl Sub for Saturating<isize>
type Output = Saturating<isize>
1.74.0 · Source§impl Sub for Saturating<u8>
 
impl Sub for Saturating<u8>
type Output = Saturating<u8>
1.74.0 · Source§impl Sub for Saturating<u16>
 
impl Sub for Saturating<u16>
type Output = Saturating<u16>
1.74.0 · Source§impl Sub for Saturating<u32>
 
impl Sub for Saturating<u32>
type Output = Saturating<u32>
1.74.0 · Source§impl Sub for Saturating<u64>
 
impl Sub for Saturating<u64>
type Output = Saturating<u64>
1.74.0 · Source§impl Sub for Saturating<u128>
 
impl Sub for Saturating<u128>
type Output = Saturating<u128>
1.74.0 · Source§impl Sub for Saturating<usize>
 
impl Sub for Saturating<usize>
type Output = Saturating<usize>
Source§impl Sub for rustmax::jiff::civil::Date
Computes the span of time between two dates.
 
impl Sub for rustmax::jiff::civil::Date
Computes the span of time between two dates.
This will return a negative span when the date being subtracted is greater.
Since this uses the default configuration for calculating a span between two date (no rounding and largest units is days), this will never panic or fail in any way.
To configure the largest unit or enable rounding, use Date::since.
Source§impl Sub for rustmax::jiff::civil::DateTime
Computes the span of time between two datetimes.
 
impl Sub for rustmax::jiff::civil::DateTime
Computes the span of time between two datetimes.
This will return a negative span when the datetime being subtracted is greater.
Since this uses the default configuration for calculating a span between two datetimes (no rounding and largest units is days), this will never panic or fail in any way.
To configure the largest unit or enable rounding, use DateTime::since.
If you need a SignedDuration representing the span between two civil
datetimes, then use DateTime::duration_since.
Source§impl Sub for Time
Computes the span of time between two times.
 
impl Sub for Time
Computes the span of time between two times.
This will return a negative span when the time being subtracted is greater.
Since this uses the default configuration for calculating a span between two times (no rounding and largest units is hours), this will never panic or fail in any way.
To configure the largest unit or enable rounding, use Time::since.
Source§impl Sub for SignedDuration
 
impl Sub for SignedDuration
type Output = SignedDuration
Source§impl Sub for Timestamp
Computes the span of time between two timestamps.
 
impl Sub for Timestamp
Computes the span of time between two timestamps.
This will return a negative span when the timestamp being subtracted is greater.
Since this uses the default configuration for calculating a span between two timestamps (no rounding and largest units is seconds), this will never panic or fail in any way.
To configure the largest unit or enable rounding, use Timestamp::since.
Source§impl Sub for Offset
Computes the span of time between two offsets.
 
impl Sub for Offset
Computes the span of time between two offsets.
This will return a negative span when the offset being subtracted is greater (i.e., more east with respect to the prime meridian).
1.74.0 · Source§impl Sub<&Saturating<i8>> for &Saturating<i8>
 
impl Sub<&Saturating<i8>> for &Saturating<i8>
1.74.0 · Source§impl Sub<&Saturating<i8>> for Saturating<i8>
 
impl Sub<&Saturating<i8>> for Saturating<i8>
1.74.0 · Source§impl Sub<&Saturating<i16>> for &Saturating<i16>
 
impl Sub<&Saturating<i16>> for &Saturating<i16>
1.74.0 · Source§impl Sub<&Saturating<i16>> for Saturating<i16>
 
impl Sub<&Saturating<i16>> for Saturating<i16>
1.74.0 · Source§impl Sub<&Saturating<i32>> for &Saturating<i32>
 
impl Sub<&Saturating<i32>> for &Saturating<i32>
1.74.0 · Source§impl Sub<&Saturating<i32>> for Saturating<i32>
 
impl Sub<&Saturating<i32>> for Saturating<i32>
1.74.0 · Source§impl Sub<&Saturating<i64>> for &Saturating<i64>
 
impl Sub<&Saturating<i64>> for &Saturating<i64>
1.74.0 · Source§impl Sub<&Saturating<i64>> for Saturating<i64>
 
impl Sub<&Saturating<i64>> for Saturating<i64>
1.74.0 · Source§impl Sub<&Saturating<i128>> for &Saturating<i128>
 
impl Sub<&Saturating<i128>> for &Saturating<i128>
1.74.0 · Source§impl Sub<&Saturating<i128>> for Saturating<i128>
 
impl Sub<&Saturating<i128>> for Saturating<i128>
1.74.0 · Source§impl Sub<&Saturating<isize>> for &Saturating<isize>
 
impl Sub<&Saturating<isize>> for &Saturating<isize>
1.74.0 · Source§impl Sub<&Saturating<isize>> for Saturating<isize>
 
impl Sub<&Saturating<isize>> for Saturating<isize>
1.74.0 · Source§impl Sub<&Saturating<u8>> for &Saturating<u8>
 
impl Sub<&Saturating<u8>> for &Saturating<u8>
1.74.0 · Source§impl Sub<&Saturating<u8>> for Saturating<u8>
 
impl Sub<&Saturating<u8>> for Saturating<u8>
1.74.0 · Source§impl Sub<&Saturating<u16>> for &Saturating<u16>
 
impl Sub<&Saturating<u16>> for &Saturating<u16>
1.74.0 · Source§impl Sub<&Saturating<u16>> for Saturating<u16>
 
impl Sub<&Saturating<u16>> for Saturating<u16>
1.74.0 · Source§impl Sub<&Saturating<u32>> for &Saturating<u32>
 
impl Sub<&Saturating<u32>> for &Saturating<u32>
1.74.0 · Source§impl Sub<&Saturating<u32>> for Saturating<u32>
 
impl Sub<&Saturating<u32>> for Saturating<u32>
1.74.0 · Source§impl Sub<&Saturating<u64>> for &Saturating<u64>
 
impl Sub<&Saturating<u64>> for &Saturating<u64>
1.74.0 · Source§impl Sub<&Saturating<u64>> for Saturating<u64>
 
impl Sub<&Saturating<u64>> for Saturating<u64>
1.74.0 · Source§impl Sub<&Saturating<u128>> for &Saturating<u128>
 
impl Sub<&Saturating<u128>> for &Saturating<u128>
1.74.0 · Source§impl Sub<&Saturating<u128>> for Saturating<u128>
 
impl Sub<&Saturating<u128>> for Saturating<u128>
1.74.0 · Source§impl Sub<&Saturating<usize>> for &Saturating<usize>
 
impl Sub<&Saturating<usize>> for &Saturating<usize>
1.74.0 · Source§impl Sub<&Saturating<usize>> for Saturating<usize>
 
impl Sub<&Saturating<usize>> for Saturating<usize>
Source§impl Sub<Days> for NaiveDate
Subtract Days from NaiveDate.
 
impl Sub<Days> for NaiveDate
Subtract Days from NaiveDate.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDate::checked_sub_days to get an Option instead.
Source§impl Sub<Days> for NaiveDateTime
Subtract Days from NaiveDateTime.
 
impl Sub<Days> for NaiveDateTime
Subtract Days from NaiveDateTime.
§Panics
Panics if the resulting date would be out of range.
Consider using checked_sub_days to get an Option instead.
type Output = NaiveDateTime
Source§impl Sub<FixedOffset> for NaiveDateTime
Subtract FixedOffset from NaiveDateTime.
 
impl Sub<FixedOffset> for NaiveDateTime
Subtract FixedOffset from NaiveDateTime.
§Panics
Panics if the resulting date would be out of range.
Consider using checked_sub_offset to get an Option instead.
type Output = NaiveDateTime
Source§impl Sub<FixedOffset> for NaiveTime
Subtract FixedOffset from NaiveTime.
 
impl Sub<FixedOffset> for NaiveTime
Subtract FixedOffset from NaiveTime.
This wraps around and never overflows or underflows. In particular the subtraction ignores integral number of days.
Source§impl Sub<Months> for NaiveDate
Subtract Months from NaiveDate.
 
impl Sub<Months> for NaiveDate
Subtract Months from NaiveDate.
The result will be clamped to valid days in the resulting month, see checked_sub_months for
details.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDate::checked_sub_months to get an Option instead.
§Example
use chrono::{Months, NaiveDate};
let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();
assert_eq!(from_ymd(2014, 1, 1) - Months::new(11), from_ymd(2013, 2, 1));
assert_eq!(from_ymd(2014, 1, 1) - Months::new(12), from_ymd(2013, 1, 1));
assert_eq!(from_ymd(2014, 1, 1) - Months::new(13), from_ymd(2012, 12, 1));Source§impl Sub<Months> for NaiveDateTime
Subtract Months from NaiveDateTime.
 
impl Sub<Months> for NaiveDateTime
Subtract Months from NaiveDateTime.
The result will be clamped to valid days in the resulting month, see
NaiveDateTime::checked_sub_months for details.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDateTime::checked_sub_months to get an Option instead.
§Example
use chrono::{Months, NaiveDate};
assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(01, 00, 00).unwrap()
        - Months::new(11),
    NaiveDate::from_ymd_opt(2013, 02, 01).unwrap().and_hms_opt(01, 00, 00).unwrap()
);
assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(00, 02, 00).unwrap()
        - Months::new(12),
    NaiveDate::from_ymd_opt(2013, 01, 01).unwrap().and_hms_opt(00, 02, 00).unwrap()
);
assert_eq!(
    NaiveDate::from_ymd_opt(2014, 01, 01).unwrap().and_hms_opt(00, 00, 03).unwrap()
        - Months::new(13),
    NaiveDate::from_ymd_opt(2012, 12, 01).unwrap().and_hms_opt(00, 00, 03).unwrap()
);type Output = NaiveDateTime
Source§impl Sub<TimeDelta> for NaiveDate
Subtract TimeDelta from NaiveDate.
 
impl Sub<TimeDelta> for NaiveDate
Subtract TimeDelta from NaiveDate.
This discards the fractional days in TimeDelta, rounding to the closest integral number of
days towards TimeDelta::zero().
It is the same as the addition with a negated TimeDelta.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDate::checked_sub_signed to get an Option instead.
§Example
use chrono::{NaiveDate, TimeDelta};
let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::zero(), from_ymd(2014, 1, 1));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_seconds(86399).unwrap(), from_ymd(2014, 1, 1));
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_seconds(-86399).unwrap(),
    from_ymd(2014, 1, 1)
);
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(1).unwrap(), from_ymd(2013, 12, 31));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(-1).unwrap(), from_ymd(2014, 1, 2));
assert_eq!(from_ymd(2014, 1, 1) - TimeDelta::try_days(364).unwrap(), from_ymd(2013, 1, 2));
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_days(365 * 4 + 1).unwrap(),
    from_ymd(2010, 1, 1)
);
assert_eq!(
    from_ymd(2014, 1, 1) - TimeDelta::try_days(365 * 400 + 97).unwrap(),
    from_ymd(1614, 1, 1)
);Source§impl Sub<TimeDelta> for NaiveDateTime
Subtract TimeDelta from NaiveDateTime.
 
impl Sub<TimeDelta> for NaiveDateTime
Subtract TimeDelta from NaiveDateTime.
This is the same as the addition with a negated TimeDelta.
As a part of Chrono’s leap second handling the subtraction assumes that there is no leap
second ever, except when the NaiveDateTime itself represents a leap second in which case
the assumption becomes that there is exactly a single leap second ever.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDateTime::checked_sub_signed to get an Option instead.
§Example
use chrono::{NaiveDate, TimeDelta};
let from_ymd = |y, m, d| NaiveDate::from_ymd_opt(y, m, d).unwrap();
let d = from_ymd(2016, 7, 8);
let hms = |h, m, s| d.and_hms_opt(h, m, s).unwrap();
assert_eq!(hms(3, 5, 7) - TimeDelta::zero(), hms(3, 5, 7));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(1).unwrap(), hms(3, 5, 6));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(-1).unwrap(), hms(3, 5, 8));
assert_eq!(hms(3, 5, 7) - TimeDelta::try_seconds(3600 + 60).unwrap(), hms(2, 4, 7));
assert_eq!(
    hms(3, 5, 7) - TimeDelta::try_seconds(86_400).unwrap(),
    from_ymd(2016, 7, 7).and_hms_opt(3, 5, 7).unwrap()
);
assert_eq!(
    hms(3, 5, 7) - TimeDelta::try_days(365).unwrap(),
    from_ymd(2015, 7, 9).and_hms_opt(3, 5, 7).unwrap()
);
let hmsm = |h, m, s, milli| d.and_hms_milli_opt(h, m, s, milli).unwrap();
assert_eq!(hmsm(3, 5, 7, 450) - TimeDelta::try_milliseconds(670).unwrap(), hmsm(3, 5, 6, 780));Leap seconds are handled, but the subtraction assumes that it is the only leap second happened.
let leap = hmsm(3, 5, 59, 1_300);
assert_eq!(leap - TimeDelta::zero(), hmsm(3, 5, 59, 1_300));
assert_eq!(leap - TimeDelta::try_milliseconds(200).unwrap(), hmsm(3, 5, 59, 1_100));
assert_eq!(leap - TimeDelta::try_milliseconds(500).unwrap(), hmsm(3, 5, 59, 800));
assert_eq!(leap - TimeDelta::try_seconds(60).unwrap(), hmsm(3, 5, 0, 300));
assert_eq!(leap - TimeDelta::try_days(1).unwrap(),
           from_ymd(2016, 7, 7).and_hms_milli_opt(3, 6, 0, 300).unwrap());type Output = NaiveDateTime
Source§impl Sub<TimeDelta> for NaiveTime
Subtract TimeDelta from NaiveTime.
 
impl Sub<TimeDelta> for NaiveTime
Subtract TimeDelta from NaiveTime.
This wraps around and never overflows or underflows.
In particular the subtraction ignores integral number of days.
This is the same as addition with a negated TimeDelta.
As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap
second ever, except when the NaiveTime itself represents a leap second in which case the
assumption becomes that there is exactly a single leap second ever.
§Example
use chrono::{NaiveTime, TimeDelta};
let from_hmsm = |h, m, s, milli| NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap();
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::zero(), from_hmsm(3, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(1).unwrap(), from_hmsm(3, 5, 6, 0));
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(60 + 5).unwrap(),
    from_hmsm(3, 4, 2, 0)
);
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(2 * 60 * 60 + 6 * 60).unwrap(),
    from_hmsm(0, 59, 7, 0)
);
assert_eq!(
    from_hmsm(3, 5, 7, 0) - TimeDelta::try_milliseconds(80).unwrap(),
    from_hmsm(3, 5, 6, 920)
);
assert_eq!(
    from_hmsm(3, 5, 7, 950) - TimeDelta::try_milliseconds(280).unwrap(),
    from_hmsm(3, 5, 7, 670)
);The subtraction wraps around.
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_seconds(8*60*60).unwrap(), from_hmsm(19, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - TimeDelta::try_days(800).unwrap(), from_hmsm(3, 5, 7, 0));Leap seconds are handled, but the subtraction assumes that it is the only leap second happened.
let leap = from_hmsm(3, 5, 59, 1_300);
assert_eq!(leap - TimeDelta::zero(), from_hmsm(3, 5, 59, 1_300));
assert_eq!(leap - TimeDelta::try_milliseconds(200).unwrap(), from_hmsm(3, 5, 59, 1_100));
assert_eq!(leap - TimeDelta::try_milliseconds(500).unwrap(), from_hmsm(3, 5, 59, 800));
assert_eq!(leap - TimeDelta::try_seconds(60).unwrap(), from_hmsm(3, 5, 0, 300));
assert_eq!(leap - TimeDelta::try_days(1).unwrap(), from_hmsm(3, 6, 0, 300));Source§impl Sub<Effects> for Style
§Examples
let style = anstyle::Style::new().bold().underline() - anstyle::Effects::BOLD.into();
 
impl Sub<Effects> for Style
§Examples
let style = anstyle::Style::new().bold().underline() - anstyle::Effects::BOLD.into();Source§impl Sub<SignedDuration> for rustmax::jiff::civil::Date
Subtracts a signed duration of time from a date.
 
impl Sub<SignedDuration> for rustmax::jiff::civil::Date
Subtracts a signed duration of time from a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Date::checked_sub.
Source§impl Sub<SignedDuration> for rustmax::jiff::civil::DateTime
Subtracts a signed duration of time from a datetime.
 
impl Sub<SignedDuration> for rustmax::jiff::civil::DateTime
Subtracts a signed duration of time from a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use DateTime::checked_sub.
Source§impl Sub<SignedDuration> for Time
Subtracts a signed duration of time. This uses wrapping arithmetic.
 
impl Sub<SignedDuration> for Time
Subtracts a signed duration of time. This uses wrapping arithmetic.
For checked arithmetic, see Time::checked_sub.
Source§impl Sub<SignedDuration> for Timestamp
Subtracts a signed duration of time from a timestamp.
 
impl Sub<SignedDuration> for Timestamp
Subtracts a signed duration of time from a timestamp.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Timestamp::checked_sub.
Source§impl Sub<SignedDuration> for Offset
Subtracts a signed duration of time from an offset. This panics on
overflow.
 
impl Sub<SignedDuration> for Offset
Subtracts a signed duration of time from an offset. This panics on overflow.
For checked arithmetic, see Offset::checked_sub.
Source§impl Sub<Span> for rustmax::jiff::civil::Date
Subtracts a span of time from a date.
 
impl Sub<Span> for rustmax::jiff::civil::Date
Subtracts a span of time from a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Date::checked_sub.
Source§impl Sub<Span> for rustmax::jiff::civil::DateTime
Subtracts a span of time from a datetime.
 
impl Sub<Span> for rustmax::jiff::civil::DateTime
Subtracts a span of time from a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use DateTime::checked_sub.
Source§impl Sub<Span> for Time
Subtracts a span of time. This uses wrapping arithmetic.
 
impl Sub<Span> for Time
Subtracts a span of time. This uses wrapping arithmetic.
For checked arithmetic, see Time::checked_sub.
Source§impl Sub<Span> for Timestamp
Subtracts a span of time from a timestamp.
 
impl Sub<Span> for Timestamp
Subtracts a span of time from a timestamp.
This uses checked arithmetic and panics when it fails. To handle arithmetic
without panics, use Timestamp::checked_sub. Note that the failure
condition includes overflow and using a Span with non-zero units greater
than hours.
Source§impl Sub<Span> for Offset
Subtracts a span of time from an offset. This panics on overflow.
 
impl Sub<Span> for Offset
Subtracts a span of time from an offset. This panics on overflow.
For checked arithmetic, see Offset::checked_sub.
Source§impl Sub<Duration> for NaiveDateTime
Subtract std::time::Duration from NaiveDateTime.
 
impl Sub<Duration> for NaiveDateTime
Subtract std::time::Duration from NaiveDateTime.
As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap
second ever, except when the NaiveDateTime itself represents a leap second in which case
the assumption becomes that there is exactly a single leap second ever.
§Panics
Panics if the resulting date would be out of range.
Consider using NaiveDateTime::checked_sub_signed to get an Option instead.
type Output = NaiveDateTime
Source§impl Sub<Duration> for NaiveTime
Subtract std::time::Duration from NaiveTime.
 
impl Sub<Duration> for NaiveTime
Subtract std::time::Duration from NaiveTime.
This wraps around and never overflows or underflows. In particular the subtraction ignores integral number of days.
Source§impl Sub<Duration> for rustmax::jiff::civil::Date
Subtracts an unsigned duration of time from a date.
 
impl Sub<Duration> for rustmax::jiff::civil::Date
Subtracts an unsigned duration of time from a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Date::checked_sub.
Source§impl Sub<Duration> for rustmax::jiff::civil::DateTime
Subtracts an unsigned duration of time from a datetime.
 
impl Sub<Duration> for rustmax::jiff::civil::DateTime
Subtracts an unsigned duration of time from a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use DateTime::checked_sub.
Source§impl Sub<Duration> for Time
Subtracts an unsigned duration of time. This uses wrapping arithmetic.
 
impl Sub<Duration> for Time
Subtracts an unsigned duration of time. This uses wrapping arithmetic.
For checked arithmetic, see Time::checked_sub.
Source§impl Sub<Duration> for Timestamp
Subtracts an unsigned duration of time from a timestamp.
 
impl Sub<Duration> for Timestamp
Subtracts an unsigned duration of time from a timestamp.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Timestamp::checked_sub.
Source§impl Sub<Duration> for Offset
Subtracts an unsigned duration of time from an offset. This panics on
overflow.
 
impl Sub<Duration> for Offset
Subtracts an unsigned duration of time from an offset. This panics on overflow.
For checked arithmetic, see Offset::checked_sub.
1.8.0 · Source§impl Sub<Duration> for SystemTime
 
impl Sub<Duration> for SystemTime
type Output = SystemTime
Source§impl<'a> Sub for &'a Zoned
Computes the span of time between two zoned datetimes.
 
impl<'a> Sub for &'a Zoned
Computes the span of time between two zoned datetimes.
This will return a negative span when the zoned datetime being subtracted is greater.
Since this uses the default configuration for calculating a span between two zoned datetimes (no rounding and largest units is days), this will never panic or fail in any way.
To configure the largest unit or enable rounding, use Zoned::since.
1.74.0 · Source§impl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
 
impl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
1.74.0 · Source§impl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
 
impl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
1.74.0 · Source§impl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
 
impl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
1.74.0 · Source§impl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
 
impl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
1.74.0 · Source§impl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
 
impl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
1.74.0 · Source§impl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
 
impl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
1.74.0 · Source§impl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
 
impl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
1.74.0 · Source§impl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
 
impl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
1.74.0 · Source§impl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
 
impl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
1.74.0 · Source§impl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
 
impl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
1.74.0 · Source§impl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
 
impl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
1.74.0 · Source§impl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
 
impl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
Source§impl<'a> Sub<SignedDuration> for &'a Zoned
Subtracts a signed duration of time from a zoned datetime.
 
impl<'a> Sub<SignedDuration> for &'a Zoned
Subtracts a signed duration of time from a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Zoned::checked_sub.
Source§impl<'a> Sub<Span> for &'a Zoned
Subtracts a span of time from a zoned datetime.
 
impl<'a> Sub<Span> for &'a Zoned
Subtracts a span of time from a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Zoned::checked_sub.
Source§impl<'a> Sub<Duration> for &'a Zoned
Subtracts an unsigned duration of time from a zoned datetime.
 
impl<'a> Sub<Duration> for &'a Zoned
Subtracts an unsigned duration of time from a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use Zoned::checked_sub.
Source§impl<Tz> Sub<Days> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract Days from DateTime.
 
impl<Tz> Sub<Days> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract Days from DateTime.
§Panics
Panics if:
- The resulting date would be out of range.
 - The local time at the resulting date does not exist or is ambiguous, for example during a daylight saving time transition.
 
Strongly consider using DateTime<Tz>::checked_sub_days to get an Option instead.
Source§impl<Tz> Sub<FixedOffset> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract FixedOffset from the datetime value of DateTime (offset remains unchanged).
 
impl<Tz> Sub<FixedOffset> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract FixedOffset from the datetime value of DateTime (offset remains unchanged).
§Panics
Panics if the resulting date would be out of range.
Source§impl<Tz> Sub<Months> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract Months from DateTime.
 
impl<Tz> Sub<Months> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract Months from DateTime.
The result will be clamped to valid days in the resulting month, see
DateTime<Tz>::checked_sub_months for details.
§Panics
Panics if:
- The resulting date would be out of range.
 - The local time at the resulting date does not exist or is ambiguous, for example during a daylight saving time transition.
 
Strongly consider using DateTime<Tz>::checked_sub_months to get an Option instead.
Source§impl<Tz> Sub<TimeDelta> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract TimeDelta from DateTime.
 
impl<Tz> Sub<TimeDelta> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract TimeDelta from DateTime.
This is the same as the addition with a negated TimeDelta.
As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap
second ever, except when the DateTime itself represents a leap second in which case
the assumption becomes that there is exactly a single leap second ever.
§Panics
Panics if the resulting date would be out of range.
Consider using DateTime<Tz>::checked_sub_signed to get an Option instead.
Source§impl<Tz> Sub<Duration> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract std::time::Duration from DateTime.
 
impl<Tz> Sub<Duration> for rustmax::chrono::DateTime<Tz>where
    Tz: TimeZone,
Subtract std::time::Duration from DateTime.
As a part of Chrono’s [leap second handling] the subtraction assumes that there is no leap
second ever, except when the DateTime itself represents a leap second in which case
the assumption becomes that there is exactly a single leap second ever.
§Panics
Panics if the resulting date would be out of range.
Consider using DateTime<Tz>::checked_sub_signed to get an Option instead.
Source§impl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl>
Subtracting unsigned integers. We just do our PrivateSub and then Trim the output.
 
impl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl>
Subtracting unsigned integers. We just do our PrivateSub and then Trim the output.