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
§Sub
tractable 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 IntervalDayTime
impl Sub for IntervalDayTime
type Output = IntervalDayTime
Source§impl Sub for IntervalMonthDayNano
impl Sub for IntervalMonthDayNano
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 BigDecimal
impl Sub for BigDecimal
type Output = BigDecimal
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 NaiveDateTime
s 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 NaiveTime
s 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 CreateFlags
impl Sub for CreateFlags
type Output = CreateFlags
Source§impl Sub for WatchFlags
impl Sub for WatchFlags
type Output = WatchFlags
Source§impl Sub for FallocateFlags
impl Sub for FallocateFlags
type Output = FallocateFlags
Source§impl Sub for MemfdFlags
impl Sub for MemfdFlags
type Output = MemfdFlags
Source§impl Sub for RenameFlags
impl Sub for 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 StatxFlags
impl Sub for StatxFlags
type Output = StatxFlags
Source§impl Sub for ReadWriteFlags
impl Sub for 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 XattrFlags
impl Sub for XattrFlags
type Output = XattrFlags
Source§impl Sub<&i8> for &BigDecimal
impl Sub<&i8> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&i8> for BigDecimal
impl Sub<&i8> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&i16> for &BigDecimal
impl Sub<&i16> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&i16> for BigDecimal
impl Sub<&i16> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&i32> for &BigDecimal
impl Sub<&i32> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&i32> for BigDecimal
impl Sub<&i32> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&i64> for &BigDecimal
impl Sub<&i64> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&i64> for BigDecimal
impl Sub<&i64> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&i128> for &BigDecimal
impl Sub<&i128> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&i128> for BigDecimal
impl Sub<&i128> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&u8> for &BigDecimal
impl Sub<&u8> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&u8> for BigDecimal
impl Sub<&u8> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&u16> for &BigDecimal
impl Sub<&u16> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&u16> for BigDecimal
impl Sub<&u16> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&u32> for &BigDecimal
impl Sub<&u32> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&u32> for BigDecimal
impl Sub<&u32> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&u64> for &BigDecimal
impl Sub<&u64> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&u64> for BigDecimal
impl Sub<&u64> for BigDecimal
type Output = BigDecimal
Source§impl Sub<&u128> for &BigDecimal
impl Sub<&u128> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<&u128> for BigDecimal
impl Sub<&u128> for BigDecimal
type Output = BigDecimal
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<&BigDecimal> for &i8
impl Sub<&BigDecimal> for &i8
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &i16
impl Sub<&BigDecimal> for &i16
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &i32
impl Sub<&BigDecimal> for &i32
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &i64
impl Sub<&BigDecimal> for &i64
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &i128
impl Sub<&BigDecimal> for &i128
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &u8
impl Sub<&BigDecimal> for &u8
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &u16
impl Sub<&BigDecimal> for &u16
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &u32
impl Sub<&BigDecimal> for &u32
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &u64
impl Sub<&BigDecimal> for &u64
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for &u128
impl Sub<&BigDecimal> for &u128
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for i8
impl Sub<&BigDecimal> for i8
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for i16
impl Sub<&BigDecimal> for i16
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for i32
impl Sub<&BigDecimal> for i32
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for i64
impl Sub<&BigDecimal> for i64
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for i128
impl Sub<&BigDecimal> for i128
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for u8
impl Sub<&BigDecimal> for u8
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for u16
impl Sub<&BigDecimal> for u16
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for u32
impl Sub<&BigDecimal> for u32
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for u64
impl Sub<&BigDecimal> for u64
type Output = BigDecimal
Source§impl Sub<&BigDecimal> for u128
impl Sub<&BigDecimal> for u128
type Output = BigDecimal
Source§impl Sub<i8> for &BigDecimal
impl Sub<i8> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<i8> for BigDecimal
impl Sub<i8> for BigDecimal
type Output = BigDecimal
Source§impl Sub<i16> for &BigDecimal
impl Sub<i16> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<i16> for BigDecimal
impl Sub<i16> for BigDecimal
type Output = BigDecimal
Source§impl Sub<i32> for &BigDecimal
impl Sub<i32> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<i32> for BigDecimal
impl Sub<i32> for BigDecimal
type Output = BigDecimal
Source§impl Sub<i64> for &BigDecimal
impl Sub<i64> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<i64> for BigDecimal
impl Sub<i64> for BigDecimal
type Output = BigDecimal
Source§impl Sub<i128> for &BigDecimal
impl Sub<i128> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<i128> for BigDecimal
impl Sub<i128> for BigDecimal
type Output = BigDecimal
Source§impl Sub<u8> for &BigDecimal
impl Sub<u8> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<u8> for BigDecimal
impl Sub<u8> for BigDecimal
type Output = BigDecimal
Source§impl Sub<u16> for &BigDecimal
impl Sub<u16> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<u16> for BigDecimal
impl Sub<u16> for BigDecimal
type Output = BigDecimal
Source§impl Sub<u32> for &BigDecimal
impl Sub<u32> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<u32> for BigDecimal
impl Sub<u32> for BigDecimal
type Output = BigDecimal
Source§impl Sub<u64> for &BigDecimal
impl Sub<u64> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<u64> for BigDecimal
impl Sub<u64> for BigDecimal
type Output = BigDecimal
Source§impl Sub<u128> for &BigDecimal
impl Sub<u128> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<u128> for BigDecimal
impl Sub<u128> for BigDecimal
type Output = BigDecimal
1.8.0 · Source§impl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
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<BigDecimal> for &i8
impl Sub<BigDecimal> for &i8
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &i16
impl Sub<BigDecimal> for &i16
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &i32
impl Sub<BigDecimal> for &i32
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &i64
impl Sub<BigDecimal> for &i64
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &i128
impl Sub<BigDecimal> for &i128
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &u8
impl Sub<BigDecimal> for &u8
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &u16
impl Sub<BigDecimal> for &u16
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &u32
impl Sub<BigDecimal> for &u32
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &u64
impl Sub<BigDecimal> for &u64
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &u128
impl Sub<BigDecimal> for &u128
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &BigDecimal
impl Sub<BigDecimal> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<BigDecimal> for &BigInt
impl Sub<BigDecimal> for &BigInt
type Output = BigDecimal
Source§impl Sub<BigDecimal> for i8
impl Sub<BigDecimal> for i8
type Output = BigDecimal
Source§impl Sub<BigDecimal> for i16
impl Sub<BigDecimal> for i16
type Output = BigDecimal
Source§impl Sub<BigDecimal> for i32
impl Sub<BigDecimal> for i32
type Output = BigDecimal
Source§impl Sub<BigDecimal> for i64
impl Sub<BigDecimal> for i64
type Output = BigDecimal
Source§impl Sub<BigDecimal> for i128
impl Sub<BigDecimal> for i128
type Output = BigDecimal
Source§impl Sub<BigDecimal> for u8
impl Sub<BigDecimal> for u8
type Output = BigDecimal
Source§impl Sub<BigDecimal> for u16
impl Sub<BigDecimal> for u16
type Output = BigDecimal
Source§impl Sub<BigDecimal> for u32
impl Sub<BigDecimal> for u32
type Output = BigDecimal
Source§impl Sub<BigDecimal> for u64
impl Sub<BigDecimal> for u64
type Output = BigDecimal
Source§impl Sub<BigDecimal> for u128
impl Sub<BigDecimal> for u128
type Output = BigDecimal
Source§impl Sub<BigDecimal> for BigDecimalRef<'_>
impl Sub<BigDecimal> for BigDecimalRef<'_>
type Output = BigDecimal
Source§impl Sub<BigDecimal> for BigInt
impl Sub<BigDecimal> for BigInt
type Output = BigDecimal
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<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<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<BigInt> for &BigDecimal
impl Sub<BigInt> for &BigDecimal
type Output = BigDecimal
Source§impl Sub<BigInt> for BigDecimal
impl Sub<BigInt> for BigDecimal
type Output = BigDecimal
Source§impl Sub<BigInt> for BigDecimalRef<'_>
impl Sub<BigInt> for BigDecimalRef<'_>
type Output = BigDecimal
Source§impl<'a> Sub<&'a IntervalDayTime> for IntervalDayTime
impl<'a> Sub<&'a IntervalDayTime> for IntervalDayTime
type Output = IntervalDayTime
Source§impl<'a> Sub<&'a IntervalMonthDayNano> for IntervalMonthDayNano
impl<'a> Sub<&'a IntervalMonthDayNano> for IntervalMonthDayNano
Source§impl<'a> Sub<IntervalDayTime> for &'a IntervalDayTime
impl<'a> Sub<IntervalDayTime> for &'a IntervalDayTime
type Output = IntervalDayTime
Source§impl<'a> Sub<IntervalMonthDayNano> for &'a IntervalMonthDayNano
impl<'a> Sub<IntervalMonthDayNano> for &'a IntervalMonthDayNano
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<BigDecimalRef<'a>> for &BigInt
impl<'a> Sub<BigDecimalRef<'a>> for &BigInt
type Output = BigDecimal
Source§impl<'a> Sub<BigDecimalRef<'a>> for BigInt
impl<'a> Sub<BigDecimalRef<'a>> for BigInt
type Output = BigDecimal
Source§impl<'a, 'b> Sub<&'b IntervalDayTime> for &'a IntervalDayTime
impl<'a, 'b> Sub<&'b IntervalDayTime> for &'a IntervalDayTime
type Output = IntervalDayTime
Source§impl<'a, 'b> Sub<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano
impl<'a, 'b> Sub<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano
Source§impl<'a, T> Sub for &'a OrderedFloat<T>
impl<'a, T> Sub for &'a OrderedFloat<T>
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<'a, T> Sub<T> for &BigDecimalwhere
T: Into<BigDecimalRef<'a>>,
impl<'a, T> Sub<T> for &BigDecimalwhere
T: Into<BigDecimalRef<'a>>,
type Output = BigDecimal
Source§impl<'a, T> Sub<T> for BigDecimalwhere
T: Into<BigDecimalRef<'a>>,
impl<'a, T> Sub<T> for BigDecimalwhere
T: Into<BigDecimalRef<'a>>,
type Output = BigDecimal
Source§impl<'a, T> Sub<T> for BigDecimalRef<'_>where
T: Into<BigDecimalRef<'a>>,
impl<'a, T> Sub<T> for BigDecimalRef<'_>where
T: Into<BigDecimalRef<'a>>,
type Output = BigDecimal
Source§impl<T> Sub for OrderedFloat<T>where
T: Sub,
impl<T> Sub for OrderedFloat<T>where
T: Sub,
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<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<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<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<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<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.