Struct OffsetRound
pub struct OffsetRound(/* private fields */);
dep_jiff
and alloc
only.Expand description
Options for Offset::round
.
This type provides a way to configure the rounding of an offset. This includes setting the smallest unit (i.e., the unit to round), the rounding increment and the rounding mode (e.g., “ceil” or “truncate”).
Offset::round
accepts anything that implements
Into<OffsetRound>
. There are a few key trait implementations that
make this convenient:
From<Unit> for OffsetRound
will construct a rounding configuration where the smallest unit is set to the one given.From<(Unit, i64)> for OffsetRound
will construct a rounding configuration where the smallest unit and the rounding increment are set to the ones given.
In order to set other options (like the rounding mode), one must explicitly
create a OffsetRound
and pass it to Offset::round
.
§Example
This example shows how to always round up to the nearest half-hour:
use jiff::{tz::{Offset, OffsetRound}, RoundMode, Unit};
let offset = Offset::from_seconds(4 * 60 * 60 + 17 * 60).unwrap();
let rounded = offset.round(
OffsetRound::new()
.smallest(Unit::Minute)
.increment(30)
.mode(RoundMode::Expand),
)?;
assert_eq!(rounded, Offset::from_seconds(4 * 60 * 60 + 30 * 60).unwrap());
Implementations§
§impl OffsetRound
impl OffsetRound
pub fn new() -> OffsetRound
pub fn new() -> OffsetRound
Create a new default configuration for rounding a time zone offset via
Offset::round
.
The default configuration does no rounding.
pub fn smallest(self, unit: Unit) -> OffsetRound
pub fn smallest(self, unit: Unit) -> OffsetRound
Set the smallest units allowed in the offset returned. These are the units that the offset is rounded to.
§Errors
The unit must be Unit::Hour
, Unit::Minute
or Unit::Second
.
§Example
A basic example that rounds to the nearest minute:
use jiff::{tz::Offset, Unit};
let offset = Offset::from_seconds(-(5 * 60 * 60 + 30)).unwrap();
assert_eq!(offset.round(Unit::Hour)?, Offset::from_hours(-5).unwrap());
pub fn mode(self, mode: RoundMode) -> OffsetRound
pub fn mode(self, mode: RoundMode) -> OffsetRound
Set the rounding mode.
This defaults to RoundMode::HalfExpand
, which makes rounding work
like how you were taught in school.
§Example
A basic example that rounds to the nearest hour, but changing its rounding mode to truncation:
use jiff::{tz::{Offset, OffsetRound}, RoundMode, Unit};
let offset = Offset::from_seconds(-(5 * 60 * 60 + 30 * 60)).unwrap();
assert_eq!(
offset.round(OffsetRound::new()
.smallest(Unit::Hour)
.mode(RoundMode::Trunc),
)?,
// The default round mode does rounding like
// how you probably learned in school, and would
// result in rounding to -6 hours. But we
// change it to truncation here, which makes it
// round -5.
Offset::from_hours(-5).unwrap(),
);
pub fn increment(self, increment: i64) -> OffsetRound
pub fn increment(self, increment: i64) -> OffsetRound
Set the rounding increment for the smallest unit.
The default value is 1
. Other values permit rounding the smallest
unit to the nearest integer increment specified. For example, if the
smallest unit is set to Unit::Minute
, then a rounding increment of
30
would result in rounding in increments of a half hour. That is,
the only minute value that could result would be 0
or 30
.
§Errors
The rounding increment must divide evenly into the next highest unit
after the smallest unit configured (and must not be equivalent to
it). For example, if the smallest unit is Unit::Second
, then
some of the valid values for the rounding increment are 1
, 2
,
4
, 5
, 15
and 30
. Namely, any integer that divides evenly into
60
seconds since there are 60
seconds in the next highest unit
(minutes).
§Example
This shows how to round an offset to the nearest 30 minute increment:
use jiff::{tz::Offset, Unit};
let offset = Offset::from_seconds(4 * 60 * 60 + 15 * 60).unwrap();
assert_eq!(
offset.round((Unit::Minute, 30))?,
Offset::from_seconds(4 * 60 * 60 + 30 * 60).unwrap(),
);
Trait Implementations§
§impl Clone for OffsetRound
impl Clone for OffsetRound
§fn clone(&self) -> OffsetRound
fn clone(&self) -> OffsetRound
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for OffsetRound
impl Debug for OffsetRound
§impl Default for OffsetRound
impl Default for OffsetRound
§fn default() -> OffsetRound
fn default() -> OffsetRound
§impl From<(Unit, i64)> for OffsetRound
impl From<(Unit, i64)> for OffsetRound
§fn from(_: (Unit, i64)) -> OffsetRound
fn from(_: (Unit, i64)) -> OffsetRound
§impl From<Unit> for OffsetRound
impl From<Unit> for OffsetRound
§fn from(unit: Unit) -> OffsetRound
fn from(unit: Unit) -> OffsetRound
impl Copy for OffsetRound
Auto Trait Implementations§
impl Freeze for OffsetRound
impl RefUnwindSafe for OffsetRound
impl Send for OffsetRound
impl Sync for OffsetRound
impl Unpin for OffsetRound
impl UnwindSafe for OffsetRound
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> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize
fn byte_align(&self) -> usize
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
TypeId
of Self
using a custom hasher.Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of<T>() -> usize
fn mem_align_of<T>() -> usize
Source§fn mem_align_of_val(&self) -> usize
fn mem_align_of_val(&self) -> usize
Source§fn mem_size_of<T>() -> usize
fn mem_size_of<T>() -> usize
Source§fn mem_size_of_val(&self) -> usize
fn mem_size_of_val(&self) -> usize
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more