Struct PiecesNumericOffset

pub struct PiecesNumericOffset { /* private fields */ }

A specific numeric offset, including the sign of the offset, for use with Pieces.

Signedness

The sign attached to this type is usually redundant, since the underlying Offset is itself signed. But it can be used to distinguish between +00:00 (+00 is the preferred offset) and -00:00 (+00 is what should be used, but only because the offset to local time is not known). Generally speaking, one should regard -00:00 as equivalent to Z, per RFC 9557.

Implementations

impl PiecesNumericOffset

fn offset(&self) -> Offset

Returns the numeric offset.

Example

use jiff::{
    fmt::temporal::{Pieces, PiecesOffset},
    tz::Offset,
};

let pieces = Pieces::parse("1970-01-01T00:00:00-05:30")?;
let off = match pieces.offset().unwrap() {
    PiecesOffset::Numeric(off) => off,
    _ => unreachable!(),
};
// This is really only useful if you care that an actual
// numeric offset was written and not, e.g., `Z`. Otherwise,
// you could just use `PiecesOffset::to_numeric_offset`.
assert_eq!(
    off.offset(),
    Offset::from_seconds(-5 * 60 * 60 - 30 * 60).unwrap(),
);

# Ok::<(), Box<dyn std::error::Error>>(())
fn is_negative(&self) -> bool

Returns whether the sign of the offset is negative or not.

When formatting a Pieces to a string, this is only used to determine the rendered sign when the Offset is itself zero. In all other cases, the sign rendered matches the sign of the Offset.

Since Offset does not keep track of a sign when its value is zero, when using the From<Offset> trait implementation for this type, is_negative is always set to false when the offset is zero.

Example

use jiff::{
    fmt::temporal::{Pieces, PiecesOffset},
    tz::Offset,
};

let pieces = Pieces::parse("1970-01-01T00:00:00-00:00")?;
let off = match pieces.offset().unwrap() {
    PiecesOffset::Numeric(off) => off,
    _ => unreachable!(),
};
// The numeric offset component in this case is
// indistiguisable from `Offset::UTC`. This is
// because an `Offset` does not use different
// representations for negative and positive zero.
assert_eq!(off.offset(), Offset::UTC);
// This is where `is_negative` comes in handy:
assert_eq!(off.is_negative(), true);

# Ok::<(), Box<dyn std::error::Error>>(())
fn with_negative_zero(self) -> PiecesNumericOffset

Sets this numeric offset to use -00:00 if and only if the offset is zero.

Example

use jiff::{
    fmt::temporal::{Pieces, PiecesNumericOffset},
    tz::Offset,
    Timestamp,
};

// If you create a `Pieces` from a `Timestamp` with a UTC offset,
// then this is interpreted as "the offset from UTC is known and is
// zero."
let pieces = Pieces::from((Timestamp::UNIX_EPOCH, Offset::UTC));
assert_eq!(pieces.to_string(), "1970-01-01T00:00:00+00:00");

// Otherwise, if you create a `Pieces` from just a `Timestamp` with
// no offset, then it is interpreted as "the offset from UTC is not
// known." Typically, this is rendered with `Z` for "Zulu":
let pieces = Pieces::from(Timestamp::UNIX_EPOCH);
assert_eq!(pieces.to_string(), "1970-01-01T00:00:00Z");

// But it might be the case that you want to use `-00:00` instead,
// perhaps to conform to some existing convention or legacy
// applications that require it:
let pieces = Pieces::from(Timestamp::UNIX_EPOCH)
    .with_offset(
        PiecesNumericOffset::from(Offset::UTC).with_negative_zero(),
    );
assert_eq!(pieces.to_string(), "1970-01-01T00:00:00-00:00");

Trait Implementations

impl Clone for PiecesNumericOffset

fn clone(&self) -> PiecesNumericOffset

impl Copy for PiecesNumericOffset

impl Debug for PiecesNumericOffset

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl Eq for PiecesNumericOffset

impl From<Offset> for PiecesNumericOffset

fn from(offset: Offset) -> PiecesNumericOffset

impl Hash for PiecesNumericOffset

fn hash<__H: Hasher>(&self, state: &mut __H)

impl PartialEq for PiecesNumericOffset

fn eq(&self, other: &PiecesNumericOffset) -> bool

impl StructuralPartialEq for PiecesNumericOffset

Auto Trait Implementations

impl Freeze for PiecesNumericOffset

impl RefUnwindSafe for PiecesNumericOffset

impl Send for PiecesNumericOffset

impl Sync for PiecesNumericOffset

impl Unpin for PiecesNumericOffset

impl UnsafeUnpin for PiecesNumericOffset

impl UnwindSafe for PiecesNumericOffset

Blanket Implementations

impl<T> Any for PiecesNumericOffset where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for PiecesNumericOffset where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for PiecesNumericOffset where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for PiecesNumericOffset where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for PiecesNumericOffset

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for PiecesNumericOffset where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for PiecesNumericOffset where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for PiecesNumericOffset where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for PiecesNumericOffset where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>