pub struct SpanTotal<'a> { /* private fields */ }
Expand description
Options for Span::total
.
This type provides a way to ergonomically determine the number of a particular unit in a span, with a potentially fractional component, with an optional relative datetime. Namely, a relative datetime is only needed when the span has a non-zero calendar unit (years, months or weeks). Otherwise, an error will be returned.
When no relative datetime is provided, days are always 24 hours long.
The main way to construct values of this type is with its From
trait
implementations:
From<Unit> for SpanTotal
computes a total for the given unit in the receiver span forSpan::total
.From<(Unit, civil::Date)> for SpanTotal
computes a total for the given unit in the receiver span forSpan::total
, relative to the given date. There are alsoFrom
implementations forcivil::DateTime
andZoned
.
§Example
This example shows how to find the number of seconds in a particular span:
use jiff::{ToSpan, Unit};
let span = 3.hours().minutes(10);
assert_eq!(span.total(Unit::Second)?, 11_400.0);
§Example: 24 hour days
This shows how to find the total number of 24 hour days in 123,456,789
seconds.
use jiff::{ToSpan, Unit};
let span = 123_456_789.seconds();
assert_eq!(span.total(Unit::Day)?, 1428.8980208333332);
§Example: DST is taken into account
The month of March 2024 in America/New_York
had 31 days, but one of those
days was 23 hours long due a transition into daylight saving time:
use jiff::{civil::date, ToSpan, Unit};
let span = 744.hours();
let relative = date(2024, 3, 1).intz("America/New_York")?;
// Because of the short day, 744 hours is actually a little *more* than
// 1 month starting from 2024-03-01.
assert_eq!(span.total((Unit::Month, &relative))?, 1.0013888888888889);
Now compare what happens when the relative datetime is civil and not time zone aware:
use jiff::{civil::date, ToSpan, Unit};
let span = 744.hours();
let relative = date(2024, 3, 1);
assert_eq!(span.total((Unit::Month, relative))?, 1.0);
Trait Implementations§
impl<'a> Copy for SpanTotal<'a>
Auto Trait Implementations§
impl<'a> Freeze for SpanTotal<'a>
impl<'a> RefUnwindSafe for SpanTotal<'a>
impl<'a> Send for SpanTotal<'a>
impl<'a> Sync for SpanTotal<'a>
impl<'a> Unpin for SpanTotal<'a>
impl<'a> UnwindSafe for SpanTotal<'a>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)