#[non_exhaustive]
pub enum AnyCalendar {
    Gregorian(Gregorian),
    Buddhist(Buddhist),
    Japanese(Japanese),
    JapaneseExtended(JapaneseExtended),
    Ethiopian(Ethiopian),
    Indian(Indian),
    Coptic(Coptic),
    Iso(Iso),
}
Expand description

This is a calendar that encompasses all formattable calendars supported by this crate

This allows for the construction of Date objects that have their calendar known at runtime.

This can be constructed by calling .into() on a concrete calendar type if the calendar type is known at compile time. When the type is known at runtime, the AnyCalendar::try_new_with_any_provider(), AnyCalendar::try_new_with_buffer_provider(), and AnyCalendar::try_new_unstable() methods may be used.

Date can also be converted to AnyCalendar-compatible ones via Date::to_any().

There are many ways of constructing an AnyCalendar’d date:

use icu::calendar::{AnyCalendar, AnyCalendarKind, DateTime, japanese::Japanese, types::Time};
use icu::locid::locale;

let locale = locale!("en-u-ca-japanese"); // English with the Japanese calendar

let calendar = AnyCalendar::try_new_for_locale_unstable(&icu_testdata::unstable(), &locale.into())
                   .expect("constructing AnyCalendar failed");
let calendar = Rc::new(calendar); // Avoid cloning it each time
                                  // If everything is a local reference, you may use icu_calendar::Ref instead.

// manually construct a datetime in this calendar
let manual_time = Time::try_new(12, 33, 12, 0).expect("failed to construct Time");
// construct from era code, year, month code, day, time, and a calendar
// This is March 28, 15 Heisei
let manual_datetime = DateTime::try_new_from_codes("heisei".parse().unwrap(), 15, "M03".parse().unwrap(), 28,
                                               manual_time, calendar.clone())
                    .expect("Failed to construct DateTime manually");


// construct another datetime by converting from ISO
let iso_datetime = DateTime::try_new_iso_datetime(2020, 9, 1, 12, 34, 28)
    .expect("Failed to construct ISO DateTime.");
let iso_converted = iso_datetime.to_calendar(calendar);

// Construct a datetime in the appropriate typed calendar and convert
let japanese_calendar = Japanese::try_new_unstable(&icu_testdata::unstable()).unwrap();
let japanese_datetime = DateTime::try_new_japanese_datetime("heisei".parse().unwrap(), 15, 3, 28,
                                                        12, 33, 12, japanese_calendar).unwrap();
// This is a DateTime<AnyCalendar>
let any_japanese_datetime = japanese_datetime.to_any();

Variants (Non-exhaustive)

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.

Gregorian(Gregorian)

A Gregorian calendar

Buddhist(Buddhist)

A Buddhist calendar

Japanese(Japanese)

A Japanese calendar

JapaneseExtended(JapaneseExtended)

A JapaneseExtended calendar

Ethiopian(Ethiopian)

An Ethiopian calendar

Indian(Indian)

An Indian calendar

Coptic(Coptic)

A Coptic calendar

Iso(Iso)

An Iso calendar

Implementations

Constructs an AnyCalendar for a given calendar kind and AnyProvider data source

As this requires a valid AnyCalendarKind to work, it does not do any kind of locale-based fallbacking. If this is desired, use Self::try_new_for_locale_with_any_provider().

For calendars that need data, will attempt to load the appropriate data from the source.

This API needs the calendar/japanese@1 or calendar/japanext@1 data key if working with Japanese calendars.

Constructs an AnyCalendar for a given calendar kind and BufferProvider data source

As this requires a valid AnyCalendarKind to work, it does not do any kind of locale-based fallbacking. If this is desired, use Self::try_new_for_locale_with_buffer_provider().

For calendars that need data, will attempt to load the appropriate data from the source.

This API needs the calendar/japanese@1 or calendar/japanext@1 data key if working with Japanese calendars.

This needs the "serde" Cargo feature to be enabled to be used

Constructs an AnyCalendar for a given calendar kind and data source.

This method is unstable; the bounds on P might expand over time as more calendars are added

As this requires a valid AnyCalendarKind to work, it does not do any kind of locale-based fallbacking. If this is desired, use Self::try_new_for_locale_unstable().

For calendars that need data, will attempt to load the appropriate data from the source

📚 Help choosing a constructor

⚠️ The bounds on this function may change over time, including in SemVer minor releases.

Creates a new instance using an AnyProvider.

For details on the behavior of this function, see: Self::try_new_for_locale_unstable

📚 Help choosing a constructor

Enabled with the "serde" feature.

Creates a new instance using a BufferProvider.

For details on the behavior of this function, see: Self::try_new_for_locale_unstable

📚 Help choosing a constructor

Constructs an AnyCalendar for a given calendar kind and data source.

This method is unstable; the bounds on P might expand over time as more calendars are added

In case the locale’s calendar is unknown or unspecified, it will attempt to load the default calendar for the locale, falling back to gregorian.

For calendars that need data, will attempt to load the appropriate data from the source

The AnyCalendarKind corresponding to the calendar this contains

Given an AnyCalendar date, convert that date to another AnyCalendar date in this calendar, if conversion is needed

Given an AnyCalendar datetime, convert that date to another AnyCalendar datetime in this calendar, if conversion is needed

Trait Implementations

The calendar-specific year represented by date

The calendar-specific month represented by date

The calendar-specific day-of-month represented by date

Information of the day of the year

The internal type used to represent dates

Construct a date from era/month codes and fields

Construct the date from an ISO date

Obtain an ISO date from this date

Count the number of months in a given year, specified by providing a date from that year Read more

Count the number of days in a given year, specified by providing a date from that year Read more

Count the number of days in a given month, specified by providing a date from that year/month Read more

Obtain a name for the calendar for debug printing

The AnyCalendarKind corresponding to this calendar, if one exists. Implementors outside of icu_calendar should return None Read more

Calculate the day of the week and return it

Converts to this type from the input type.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

The calendar being wrapped

Obtain the inner calendar

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 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.