pub struct DateTime<A> where
    A: AsCalendar
{ pub date: Date<A>, pub time: Time, }
Expand description

A date+time for a given calendar.

This can work with wrappers around Calendar types, e.g. Rc<C>, via the AsCalendar trait, much like Date.

This can be constructed manually from a Date and Time, or can be constructed from its fields via Self::try_new_from_codes(), or can be constructed with one of the new_<calendar>_datetime() per-calendar methods (and then freely converted between calendars).

use icu::calendar::DateTime;

// Example: Construction of ISO datetime from integers.
let datetime_iso = DateTime::try_new_iso_datetime(1970, 1, 2, 13, 1, 0)
    .expect("Failed to initialize ISO DateTime instance.");

assert_eq!(datetime_iso.date.year().number, 1970);
assert_eq!(datetime_iso.date.month().ordinal, 1);
assert_eq!(datetime_iso.date.day_of_month().0, 2);
assert_eq!(datetime_iso.time.hour.number(), 13);
assert_eq!(datetime_iso.time.minute.number(), 1);
assert_eq!(datetime_iso.time.second.number(), 0);

Fields

date: Date<A>

The date

time: Time

The time

Implementations

Construct a DateTime for a given Date and Time

Construct a datetime from from era/month codes and fields, and some calendar representation

Construct a DateTime from an ISO datetime and some calendar representation

Convert the DateTime to an ISO DateTime

Convert the DateTime to a DateTime in a different calendar

Type-erase the date, converting it to a date for AnyCalendar

Wrap the calendar type in Rc<T>

Useful when paired with Self::to_any() to obtain a DateTime<Rc<AnyCalendar>>

Wrap the calendar type in Arc<T>

Useful when paired with Self::to_any() to obtain a DateTime<Rc<AnyCalendar>>

Construct a new Buddhist datetime from integers.

Years are specified as BE years.

use icu::calendar::DateTime;

let datetime_buddhist =
    DateTime::try_new_buddhist_datetime(1970, 1, 2, 13, 1, 0)
        .expect("Failed to initialize Buddhist DateTime instance.");

assert_eq!(datetime_buddhist.date.year().number, 1970);
assert_eq!(datetime_buddhist.date.month().ordinal, 1);
assert_eq!(datetime_buddhist.date.day_of_month().0, 2);
assert_eq!(datetime_buddhist.time.hour.number(), 13);
assert_eq!(datetime_buddhist.time.minute.number(), 1);
assert_eq!(datetime_buddhist.time.second.number(), 0);

Construct a new Coptic datetime from integers.

Negative years are in the B.D. era, starting with 0 = 1 B.D.

use icu::calendar::DateTime;

let datetime_coptic =
    DateTime::try_new_coptic_datetime(1686, 5, 6, 13, 1, 0)
        .expect("Failed to initialize Coptic DateTime instance.");

assert_eq!(datetime_coptic.date.year().number, 1686);
assert_eq!(datetime_coptic.date.month().ordinal, 5);
assert_eq!(datetime_coptic.date.day_of_month().0, 6);
assert_eq!(datetime_coptic.time.hour.number(), 13);
assert_eq!(datetime_coptic.time.minute.number(), 1);
assert_eq!(datetime_coptic.time.second.number(), 0);

Construct a new Ethiopian datetime from integers.

For the Amete Mihret era style, negative years work with year 0 as 1 pre-Incarnation, year -1 as 2 pre-Incarnation, and so on.

use icu::calendar::ethiopian::EthiopianEraStyle;
use icu::calendar::DateTime;

let datetime_ethiopian = DateTime::try_new_ethiopian_datetime(
    EthiopianEraStyle::AmeteMihret,
    2014,
    8,
    25,
    13,
    1,
    0,
)
.expect("Failed to initialize Ethiopian DateTime instance.");

assert_eq!(datetime_ethiopian.date.year().number, 2014);
assert_eq!(datetime_ethiopian.date.month().ordinal, 8);
assert_eq!(datetime_ethiopian.date.day_of_month().0, 25);
assert_eq!(datetime_ethiopian.time.hour.number(), 13);
assert_eq!(datetime_ethiopian.time.minute.number(), 1);
assert_eq!(datetime_ethiopian.time.second.number(), 0);

Construct a new Gregorian datetime from integers.

Years are specified as ISO years.

use icu::calendar::DateTime;

let datetime_gregorian =
    DateTime::try_new_gregorian_datetime(1970, 1, 2, 13, 1, 0)
        .expect("Failed to initialize Gregorian DateTime instance.");

assert_eq!(datetime_gregorian.date.year().number, 1970);
assert_eq!(datetime_gregorian.date.month().ordinal, 1);
assert_eq!(datetime_gregorian.date.day_of_month().0, 2);
assert_eq!(datetime_gregorian.time.hour.number(), 13);
assert_eq!(datetime_gregorian.time.minute.number(), 1);
assert_eq!(datetime_gregorian.time.second.number(), 0);

Construct a new Indian datetime from integers, with year provided in the Śaka era.

use icu::calendar::DateTime;

let datetime_indian =
    DateTime::try_new_indian_datetime(1891, 10, 12, 13, 1, 0)
        .expect("Failed to initialize Indian DateTime instance.");

assert_eq!(datetime_indian.date.year().number, 1891);
assert_eq!(datetime_indian.date.month().ordinal, 10);
assert_eq!(datetime_indian.date.day_of_month().0, 12);
assert_eq!(datetime_indian.time.hour.number(), 13);
assert_eq!(datetime_indian.time.minute.number(), 1);
assert_eq!(datetime_indian.time.second.number(), 0);

Construct a new ISO datetime from integers.

use icu::calendar::DateTime;

let datetime_iso = DateTime::try_new_iso_datetime(1970, 1, 2, 13, 1, 0)
    .expect("Failed to initialize ISO DateTime instance.");

assert_eq!(datetime_iso.date.year().number, 1970);
assert_eq!(datetime_iso.date.month().ordinal, 1);
assert_eq!(datetime_iso.date.day_of_month().0, 2);
assert_eq!(datetime_iso.time.hour.number(), 13);
assert_eq!(datetime_iso.time.minute.number(), 1);
assert_eq!(datetime_iso.time.second.number(), 0);

Minute count representation of calendars starting from 00:00:00 on Jan 1st, 1970.

use icu::calendar::DateTime;

let today = DateTime::try_new_iso_datetime(2020, 2, 29, 0, 0, 0).unwrap();

assert_eq!(today.minutes_since_local_unix_epoch(), 26382240);
assert_eq!(
    DateTime::from_minutes_since_local_unix_epoch(26382240),
    today
);

let today = DateTime::try_new_iso_datetime(1970, 1, 1, 0, 0, 0).unwrap();

assert_eq!(today.minutes_since_local_unix_epoch(), 0);
assert_eq!(DateTime::from_minutes_since_local_unix_epoch(0), today);

Convert minute count since 00:00:00 on Jan 1st, 1970 to ISO Date.

Examples
use icu::calendar::DateTime;

// After Unix Epoch
let today = DateTime::try_new_iso_datetime(2020, 2, 29, 0, 0, 0).unwrap();

assert_eq!(today.minutes_since_local_unix_epoch(), 26382240);
assert_eq!(
    DateTime::from_minutes_since_local_unix_epoch(26382240),
    today
);

// Unix Epoch
let today = DateTime::try_new_iso_datetime(1970, 1, 1, 0, 0, 0).unwrap();

assert_eq!(today.minutes_since_local_unix_epoch(), 0);
assert_eq!(DateTime::from_minutes_since_local_unix_epoch(0), today);

// Before Unix Epoch
let today = DateTime::try_new_iso_datetime(1967, 4, 6, 20, 40, 0).unwrap();

assert_eq!(today.minutes_since_local_unix_epoch(), -1440200);
assert_eq!(
    DateTime::from_minutes_since_local_unix_epoch(-1440200),
    today
);

Construct a new Japanese datetime from integers.

Years are specified in the era provided.

use icu::calendar::japanese::Japanese;
use icu::calendar::{types, DateTime};
use std::convert::TryFrom;
use tinystr::tinystr;

let japanese_calendar =
    Japanese::try_new_unstable(&icu_testdata::unstable())
        .expect("Cannot load japanese data");

let era = types::Era(tinystr!(16, "heisei"));

let datetime = DateTime::try_new_japanese_datetime(
    era,
    14,
    1,
    2,
    13,
    1,
    0,
    japanese_calendar,
)
.expect("Constructing a date should succeed");

assert_eq!(datetime.date.year().era, era);
assert_eq!(datetime.date.year().number, 14);
assert_eq!(datetime.date.month().ordinal, 1);
assert_eq!(datetime.date.day_of_month().0, 2);
assert_eq!(datetime.time.hour.number(), 13);
assert_eq!(datetime.time.minute.number(), 1);
assert_eq!(datetime.time.second.number(), 0);

Construct a new Japanese datetime from integers with all eras.

Years are specified in the era provided.

use icu::calendar::japanese::JapaneseExtended;
use icu::calendar::{types, DateTime};
use std::convert::TryFrom;
use tinystr::tinystr;

let japanext_calendar =
    JapaneseExtended::try_new_unstable(&icu_testdata::unstable())
        .expect("Cannot load japanese data");

let era = types::Era(tinystr!(16, "kansei-1789"));

let datetime = DateTime::try_new_japanese_extended_datetime(
    era,
    7,
    1,
    2,
    13,
    1,
    0,
    japanext_calendar,
)
.expect("Constructing a date should succeed");

assert_eq!(datetime.date.year().era, era);
assert_eq!(datetime.date.year().number, 7);
assert_eq!(datetime.date.month().ordinal, 1);
assert_eq!(datetime.date.day_of_month().0, 2);
assert_eq!(datetime.time.hour.number(), 13);
assert_eq!(datetime.time.minute.number(), 1);
assert_eq!(datetime.time.second.number(), 0);

Construct a new Julian datetime from integers.

Zero and negative years are in BC, with year 0 = 1 BC

use icu::calendar::DateTime;

let datetime_julian =
    DateTime::try_new_julian_datetime(1969, 12, 20, 13, 1, 0)
        .expect("Failed to initialize Julian DateTime instance.");

assert_eq!(datetime_julian.date.year().number, 1969);
assert_eq!(datetime_julian.date.month().ordinal, 12);
assert_eq!(datetime_julian.date.day_of_month().0, 20);
assert_eq!(datetime_julian.time.hour.number(), 13);
assert_eq!(datetime_julian.time.minute.number(), 1);
assert_eq!(datetime_julian.time.second.number(), 0);

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Gets the era and year input.

Gets the month input.

Gets the day input.

Gets the weekday input.

Gets information on the position of the day within the year.

The calendar this date relates to

Gets the kind of calendar this date is for, if associated with AnyCalendar In most cases you’ll probably want to return AnyCalendarKind::Iso Read more

Converts date to ISO

Formats the value using the given formatter. Read more

Gets the hour input.

Gets the minute input.

Gets the second input.

Gets the fractional second input.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.