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 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 ResolveFlag
impl Sub for ResolveFlag
type Output = ResolveFlag
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 WaitPidFlag
impl Sub for WaitPidFlag
type Output = WaitPidFlag
Source§impl Sub for AccessFlags
impl Sub for 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 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 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 for CodegenConfig
impl Sub for CodegenConfig
type Output = CodegenConfig
Source§impl Sub for NaiveDate
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
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
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 Effects
impl Sub for Effects
§Examples
let effects = (anstyle::Effects::BOLD | anstyle::Effects::UNDERLINE) - anstyle::Effects::BOLD;
assert_eq!(format!("{:?}", effects), "Effects(UNDERLINE)");
Source§impl Sub for rustmax::jiff::civil::Date
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
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
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
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
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 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>
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
.
Source§impl<'a> Sub<SignedDuration> for &'a Zoned
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
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
.
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<Duration> for &'a Zoned
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,
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,
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,
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,
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,
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>
impl<Ul, Bl, Ur> Sub<Ur> for UInt<Ul, Bl>
Subtracting unsigned integers. We just do our PrivateSub
and then Trim
the output.