icu::datetime::fieldsets::zone

Struct GenericLong

Source
pub struct GenericLong;
Expand description

“Central Time” ⇒ time zone in generic non-location format, long length

§Examples

use icu::datetime::input::Date;
use icu::datetime::input::{Time, TimeZone,TimeZoneInfo,  UtcOffset};
use icu::datetime::NoCalendarFormatter;
use icu::time::zone::TimeZoneVariant;
use icu::datetime::fieldsets::zone::GenericLong;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_writeable_eq;

let fmt = NoCalendarFormatter::try_new(
    locale!("en").into(),
    GenericLong
)
.unwrap();

// Time zone info for America/Chicago in the summer
let zone = TimeZone(tinystr!(8, "uschi"))
    .with_offset("-05".parse().ok())
    .at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()))
    .with_zone_variant(TimeZoneVariant::Daylight);

assert_writeable_eq!(
    fmt.format(&zone),
    "Central Time"
);

When a display name is unavailable, falls back to the location format:

use icu::datetime::input::Date;
use icu::datetime::input::{Time, TimeZone};
use icu::calendar::Gregorian;
use icu::datetime::FixedCalendarDateTimeFormatter;
use icu::datetime::fieldsets::zone::GenericShort;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_writeable_eq;

// Time zone info for Europe/Istanbul
let zone = TimeZone(tinystr!(8, "trist"))
    .without_offset()
    .at_time((Date::try_new_iso(2022, 1, 29).unwrap(), Time::midnight()));

let fmt = FixedCalendarDateTimeFormatter::<Gregorian, _>::try_new(
    locale!("en").into(),
    GenericShort,
)
.unwrap();

assert_writeable_eq!(
    fmt.format(&zone),
    "Türkiye Time"
);

Can also fall back to the UTC offset:

use icu::datetime::input::Date;
use icu::datetime::input::Time;
use icu::datetime::NoCalendarFormatter;
use icu::datetime::fieldsets::zone::GenericShort;
use icu::datetime::DateTimeWriteError;
use icu::locale::locale;
use icu::time::zone::IanaParser;
use tinystr::tinystr;
use writeable::assert_writeable_eq;

// Set up the formatter
let mut tzf = NoCalendarFormatter::try_new(
    locale!("en").into(),
    GenericShort,
)
.unwrap();

// "uschi" - has symbol data for short generic non-location
let time_zone = IanaParser::new()
    .parse("America/Chicago")
    .with_offset("-05".parse().ok())
    .at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_writeable_eq!(
    tzf.format(&time_zone),
    "CT"
);

// "ushnl" - has time zone override symbol data for short generic non-location
let time_zone = IanaParser::new()
    .parse("Pacific/Honolulu")
    .with_offset("-10".parse().ok())
    .at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_writeable_eq!(
    tzf.format(&time_zone),
    "HST"
);

// Mis-spelling of "America/Chicago" results in a fallback to offset format
let time_zone = IanaParser::new()
    .parse("America/Chigagou")
    .with_offset("-05".parse().ok())
    .at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_writeable_eq!(
    tzf.format(&time_zone),
    "GMT-5"
);

Since non-location names might change over time, this time zone style requires a reference time.

use icu::datetime::NoCalendarFormatter;
use icu::datetime::fieldsets::zone::GenericLong;
use icu::datetime::input::TimeZone;
use tinystr::tinystr;
use icu::locale::locale;
use writeable::assert_writeable_eq;

let time_zone_basic = TimeZone(tinystr!(8, "uschi")).without_offset();

let formatter = NoCalendarFormatter::try_new(
    locale!("en-US").into(),
    GenericLong,
)
.unwrap();

// error[E0271]: type mismatch resolving `<Base as TimeZoneModel>::LocalTime == (Date<Iso>, Time)`
// note: required by a bound in `NoCalendarFormatter::<C, FSet>::format`
formatter.format(&time_zone_basic);

Trait Implementations§

Source§

impl Clone for GenericLong

Source§

fn clone(&self) -> GenericLong

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl DateTimeMarkers for GenericLong

Source§

type D = ()

Associated types for date formatting. Read more
Source§

type T = ()

Associated types for time formatting. Read more
Source§

type Z = GenericLong

Associated types for time zone formatting. Read more
Source§

type GluePatternV1 = NeverMarker<GluePattern<'static>>

Marker for loading the date/time glue pattern.
Source§

impl DateTimeNamesMarker for GenericLong

Source§

impl Debug for GenericLong

Source§

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

Formats the value using the given formatter. Read more
Source§

impl GetField<CompositeFieldSet> for GenericLong

Source§

fn get_field(&self) -> CompositeFieldSet

Returns the value of this trait’s field T.
Source§

impl PartialEq for GenericLong

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl ZoneMarkers for GenericLong

Source§

type TimeZoneIdInput = TimeZone

Marker for resolving the time zone id input field.
Source§

type TimeZoneOffsetInput = Option<UtcOffset>

Marker for resolving the time zone offset input field.
Source§

type TimeZoneVariantInput = ()

Marker for resolving the time zone variant input field.
Source§

type TimeZoneLocalTimeInput = (Date<Iso>, Time)

Marker for resolving the time zone non-location display names, which depend on the datetime.
Source§

type EssentialsV1 = TimeZoneEssentialsV1

Marker for loading core time zone data.
Source§

type LocationsV1 = LocationsV1

Marker for loading location names for time zone formatting
Source§

type LocationsRootV1 = LocationsRootV1

Marker for loading location names for time zone formatting
Source§

type ExemplarCitiesV1 = NeverMarker<ExemplarCities<'static>>

Marker for loading exemplar city names for time zone formatting
Source§

type ExemplarCitiesRootV1 = NeverMarker<ExemplarCities<'static>>

Marker for loading exemplar city names for time zone formatting
Source§

type GenericLongV1 = MetazoneGenericNamesLongV1

Marker for loading generic long time zone names.
Source§

type GenericShortV1 = NeverMarker<MetazoneGenericNames<'static>>

Marker for loading generic short time zone names.
Source§

type StandardLongV1 = MetazoneStandardNamesLongV1

Marker for loading standard long time zone names.
Source§

type SpecificLongV1 = NeverMarker<MetazoneSpecificNames<'static>>

Marker for loading specific long time zone names.
Source§

type SpecificShortV1 = NeverMarker<MetazoneSpecificNames<'static>>

Marker for loading generic short time zone names.
Source§

type MetazonePeriodV1 = MetazonePeriodV1

Marker for loading metazone periods.
Source§

impl Copy for GenericLong

Source§

impl Eq for GenericLong

Source§

impl StructuralPartialEq for GenericLong

Source§

impl UnstableSealed for GenericLong

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

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

Source§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<M, T> DateTimeNamesFrom<M> for T
where M: DateTimeNamesMarker, T: DateTimeNamesMarker, <<T as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container: From<<<M as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container>, <<T as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container: From<<<M as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container>, <<T as DateTimeNamesMarker>::WeekdayNames as NamesContainer<WeekdayNamesV1, WeekdayNameLength>>::Container: From<<<M as DateTimeNamesMarker>::WeekdayNames as NamesContainer<WeekdayNamesV1, WeekdayNameLength>>::Container>, <<T as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DayPeriodNamesV1, DayPeriodNameLength>>::Container: From<<<M as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DayPeriodNamesV1, DayPeriodNameLength>>::Container>, <<T as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimeZoneEssentialsV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimeZoneEssentialsV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneLocations as NamesContainer<LocationsV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneLocations as NamesContainer<LocationsV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<LocationsRootV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<LocationsRootV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<ExemplarCitiesV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<ExemplarCitiesV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<ExemplarCitiesRootV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<ExemplarCitiesRootV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<MetazoneGenericNamesLongV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<MetazoneGenericNamesLongV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<MetazoneGenericNamesShortV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<MetazoneGenericNamesShortV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<MetazoneStandardNamesLongV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<MetazoneStandardNamesLongV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<MetazoneSpecificNamesLongV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<MetazoneSpecificNamesLongV1, ()>>::Container>, <<T as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<MetazoneSpecificNamesShortV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<MetazoneSpecificNamesShortV1, ()>>::Container>, <<T as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<MetazonePeriodV1, ()>>::Container: From<<<M as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<MetazonePeriodV1, ()>>::Container>,

Source§

fn map_year_names( other: <<M as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container, ) -> <<T as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container

Source§

fn map_month_names( other: <<M as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container, ) -> <<T as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container

Source§

fn map_weekday_names( other: <<M as DateTimeNamesMarker>::WeekdayNames as NamesContainer<WeekdayNamesV1, WeekdayNameLength>>::Container, ) -> <<T as DateTimeNamesMarker>::WeekdayNames as NamesContainer<WeekdayNamesV1, WeekdayNameLength>>::Container

Source§

fn map_day_period_names( other: <<M as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DayPeriodNamesV1, DayPeriodNameLength>>::Container, ) -> <<T as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DayPeriodNamesV1, DayPeriodNameLength>>::Container

Source§

fn map_zone_essentials( other: <<M as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimeZoneEssentialsV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimeZoneEssentialsV1, ()>>::Container

Source§

fn map_zone_locations( other: <<M as DateTimeNamesMarker>::ZoneLocations as NamesContainer<LocationsV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneLocations as NamesContainer<LocationsV1, ()>>::Container

Source§

fn map_zone_locations_root( other: <<M as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<LocationsRootV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<LocationsRootV1, ()>>::Container

Source§

fn map_zone_exemplars( other: <<M as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<ExemplarCitiesV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<ExemplarCitiesV1, ()>>::Container

Source§

fn map_zone_exemplars_root( other: <<M as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<ExemplarCitiesRootV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<ExemplarCitiesRootV1, ()>>::Container

Source§

fn map_zone_generic_long( other: <<M as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<MetazoneGenericNamesLongV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<MetazoneGenericNamesLongV1, ()>>::Container

Source§

fn map_zone_generic_short( other: <<M as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<MetazoneGenericNamesShortV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<MetazoneGenericNamesShortV1, ()>>::Container

Source§

fn map_zone_standard_long( other: <<M as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<MetazoneStandardNamesLongV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<MetazoneStandardNamesLongV1, ()>>::Container

Source§

fn map_zone_specific_long( other: <<M as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<MetazoneSpecificNamesLongV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<MetazoneSpecificNamesLongV1, ()>>::Container

Source§

fn map_zone_specific_short( other: <<M as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<MetazoneSpecificNamesShortV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<MetazoneSpecificNamesShortV1, ()>>::Container

Source§

fn map_metazone_lookup( other: <<M as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<MetazonePeriodV1, ()>>::Container, ) -> <<T as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<MetazonePeriodV1, ()>>::Container

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> GetField<T> for T
where T: Copy + UnstableSealed,

Source§

fn get_field(&self) -> T

Returns the value of this trait’s field T.
Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T> ErasedDestructor for T
where T: 'static,