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§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
Source§impl Sub for LibInBundleI
impl Sub for LibInBundleI
type Output = LibInBundleI
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 otter_nodejs_tests::nix::fcntl::FallocateFlags
impl Sub for otter_nodejs_tests::nix::fcntl::FallocateFlags
type Output = FallocateFlags
Source§impl Sub for otter_nodejs_tests::nix::fcntl::RenameFlags
impl Sub for otter_nodejs_tests::nix::fcntl::RenameFlags
type Output = RenameFlags
Source§impl Sub for SpliceFFlags
impl Sub for SpliceFFlags
type Output = SpliceFFlags
Source§impl Sub for DeleteModuleFlags
impl Sub for DeleteModuleFlags
type Output = DeleteModuleFlags
Source§impl Sub for ModuleInitFlags
impl Sub for ModuleInitFlags
type Output = ModuleInitFlags
Source§impl Sub for InterfaceFlags
impl Sub for InterfaceFlags
type Output = InterfaceFlags
Source§impl Sub for CloneFlags
impl Sub for CloneFlags
type Output = CloneFlags
Source§impl Sub for EpollCreateFlags
impl Sub for EpollCreateFlags
type Output = EpollCreateFlags
Source§impl Sub for EpollFlags
impl Sub for EpollFlags
type Output = EpollFlags
Source§impl Sub for AddWatchFlags
impl Sub for AddWatchFlags
type Output = AddWatchFlags
Source§impl Sub for MemFdCreateFlag
impl Sub for MemFdCreateFlag
type Output = MemFdCreateFlag
Source§impl Sub for MRemapFlags
impl Sub for MRemapFlags
type Output = MRemapFlags
Source§impl Sub for MlockAllFlags
impl Sub for MlockAllFlags
type Output = MlockAllFlags
Source§impl Sub for QuotaValidFlags
impl Sub for QuotaValidFlags
type Output = QuotaValidFlags
Source§impl Sub for TimestampingFlag
impl Sub for TimestampingFlag
type Output = TimestampingFlag
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 TimerFlags
impl Sub for TimerFlags
type Output = TimerFlags
Source§impl Sub for TimerSetTimeFlags
impl Sub for TimerSetTimeFlags
type Output = TimerSetTimeFlags
Source§impl Sub for WaitPidFlag
impl Sub for WaitPidFlag
type Output = WaitPidFlag
Source§impl Sub for AccessFlags
impl Sub for AccessFlags
type Output = AccessFlags
1.74.0 (const: unstable) · Source§impl Sub for Saturating<i128>
impl Sub for Saturating<i128>
type Output = Saturating<i128>
1.74.0 (const: unstable) · Source§impl Sub for Saturating<isize>
impl Sub for Saturating<isize>
type Output = Saturating<isize>
1.74.0 (const: unstable) · Source§impl Sub for Saturating<u128>
impl Sub for Saturating<u128>
type Output = Saturating<u128>
1.74.0 (const: unstable) · Source§impl Sub for Saturating<usize>
impl Sub for Saturating<usize>
type Output = Saturating<usize>
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 Transformations
impl Sub for Transformations
type Output = Transformations
Source§impl Sub for CreateFlags
impl Sub for CreateFlags
type Output = CreateFlags
Source§impl Sub for WatchFlags
impl Sub for 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 MemfdFlags
impl Sub for 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 ResolveFlags
impl Sub for ResolveFlags
type Output = ResolveFlags
Source§impl Sub for StatVfsMountFlags
impl Sub for StatVfsMountFlags
type Output = StatVfsMountFlags
Source§impl Sub for ReadWriteFlags
impl Sub for ReadWriteFlags
type Output = ReadWriteFlags
Source§impl Sub for StatxAttributes
impl Sub for StatxAttributes
type Output = StatxAttributes
Source§impl Sub for StatxFlags
impl Sub for StatxFlags
type Output = StatxFlags
Source§impl Sub for XattrFlags
impl Sub for XattrFlags
type Output = XattrFlags
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i8>> for &Saturating<i8>
impl Sub<&Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i8>> for Saturating<i8>
impl Sub<&Saturating<i8>> for Saturating<i8>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i16>> for &Saturating<i16>
impl Sub<&Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i16>> for Saturating<i16>
impl Sub<&Saturating<i16>> for Saturating<i16>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i32>> for &Saturating<i32>
impl Sub<&Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i32>> for Saturating<i32>
impl Sub<&Saturating<i32>> for Saturating<i32>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i64>> for &Saturating<i64>
impl Sub<&Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i64>> for Saturating<i64>
impl Sub<&Saturating<i64>> for Saturating<i64>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i128>> for &Saturating<i128>
impl Sub<&Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<i128>> for Saturating<i128>
impl Sub<&Saturating<i128>> for Saturating<i128>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<isize>> for &Saturating<isize>
impl Sub<&Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<isize>> for Saturating<isize>
impl Sub<&Saturating<isize>> for Saturating<isize>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u8>> for &Saturating<u8>
impl Sub<&Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u8>> for Saturating<u8>
impl Sub<&Saturating<u8>> for Saturating<u8>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u16>> for &Saturating<u16>
impl Sub<&Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u16>> for Saturating<u16>
impl Sub<&Saturating<u16>> for Saturating<u16>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u32>> for &Saturating<u32>
impl Sub<&Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u32>> for Saturating<u32>
impl Sub<&Saturating<u32>> for Saturating<u32>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u64>> for &Saturating<u64>
impl Sub<&Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u64>> for Saturating<u64>
impl Sub<&Saturating<u64>> for Saturating<u64>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u128>> for &Saturating<u128>
impl Sub<&Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<u128>> for Saturating<u128>
impl Sub<&Saturating<u128>> for Saturating<u128>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<usize>> for &Saturating<usize>
impl Sub<&Saturating<usize>> for &Saturating<usize>
1.74.0 (const: unstable) · Source§impl Sub<&Saturating<usize>> for Saturating<usize>
impl Sub<&Saturating<usize>> for Saturating<usize>
Source§impl Sub<usize> for LibInBundleI
impl Sub<usize> for LibInBundleI
type Output = LibInBundleI
Source§impl Sub<LibInBundleI> for usize
impl Sub<LibInBundleI> for usize
type Output = LibInBundleI
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<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.
1.8.0 · Source§impl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
Source§impl Sub<Duration> for PrimitiveDateTime
impl Sub<Duration> for PrimitiveDateTime
type Output = PrimitiveDateTime
Source§impl Sub<SystemTime> for OffsetDateTime
Available on crate feature std only.
impl Sub<SystemTime> for OffsetDateTime
std only.1.74.0 (const: unstable) · Source§impl Sub<Saturating<i8>> for &Saturating<i8>
impl Sub<Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<i16>> for &Saturating<i16>
impl Sub<Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<i32>> for &Saturating<i32>
impl Sub<Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<i64>> for &Saturating<i64>
impl Sub<Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<i128>> for &Saturating<i128>
impl Sub<Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<isize>> for &Saturating<isize>
impl Sub<Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<u8>> for &Saturating<u8>
impl Sub<Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<u16>> for &Saturating<u16>
impl Sub<Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<u32>> for &Saturating<u32>
impl Sub<Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<u64>> for &Saturating<u64>
impl Sub<Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<u128>> for &Saturating<u128>
impl Sub<Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Sub<Saturating<usize>> for &Saturating<usize>
impl Sub<Saturating<usize>> for &Saturating<usize>
Source§impl Sub<Duration> for SystemTime
Available on crate feature std only.
impl Sub<Duration> for SystemTime
std only.type Output = SystemTime
Source§impl Sub<Duration> for PrimitiveDateTime
impl Sub<Duration> for PrimitiveDateTime
type Output = PrimitiveDateTime
Source§impl Sub<OffsetDateTime> for SystemTime
Available on crate feature std only.
impl Sub<OffsetDateTime> for SystemTime
std only.Source§impl<'a, T> Sub<&'a OrderedFloat<T>> for OrderedFloat<T>
impl<'a, T> Sub<&'a OrderedFloat<T>> for OrderedFloat<T>
Source§impl<'a, T> Sub<&'a T> for &'a OrderedFloat<T>
impl<'a, T> Sub<&'a T> for &'a OrderedFloat<T>
Source§impl<'a, T> Sub<&'a T> for OrderedFloat<T>
impl<'a, T> Sub<&'a T> for OrderedFloat<T>
Source§impl<'a, T> Sub<OrderedFloat<T>> for &'a OrderedFloat<T>
impl<'a, T> Sub<OrderedFloat<T>> for &'a OrderedFloat<T>
Source§impl<'a, T> Sub<T> for &'a OrderedFloat<T>
impl<'a, T> Sub<T> for &'a OrderedFloat<T>
Source§impl<T> Sub for OrderedFloat<T>where
T: Sub,
impl<T> Sub for OrderedFloat<T>where
T: Sub,
Source§impl<T> Sub for PosC<T>where
T: CheckedArith,
impl<T> Sub for PosC<T>where
T: CheckedArith,
Source§impl<T> Sub<T> for NotNan<T>where
T: Float,
Subtracts a float directly.
impl<T> Sub<T> for NotNan<T>where
T: Float,
Subtracts a float directly.
Panics if the provided value is NaN or the computation results in NaN
Source§impl<T> Sub<T> for OrderedFloat<T>where
T: Sub,
impl<T> Sub<T> for OrderedFloat<T>where
T: Sub,
Source§impl<T> Sub<T> for OffsetDateTime
impl<T> Sub<T> for OffsetDateTime
type Output = OffsetDateTime
Source§impl<Tz> Sub<Days> for DateTime<Tz>where
Tz: TimeZone,
Subtract Days from DateTime.
impl<Tz> Sub<Days> for 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 DateTime<Tz>where
Tz: TimeZone,
Subtract FixedOffset from the datetime value of DateTime (offset remains unchanged).
impl<Tz> Sub<FixedOffset> for 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 DateTime<Tz>where
Tz: TimeZone,
Subtract Months from DateTime.
impl<Tz> Sub<Months> for 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 DateTime<Tz>where
Tz: TimeZone,
Subtract TimeDelta from DateTime.
impl<Tz> Sub<TimeDelta> for 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 DateTime<Tz>where
Tz: TimeZone,
Subtract std::time::Duration from DateTime.
impl<Tz> Sub<Duration> for 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.