#[non_exhaustive]pub struct V {
pub length: NeoSkeletonLength,
}
Expand description
“Central Time” ⇒ time zone in generic non-location format
§Examples
use icu::calendar::{Date, Time};
use icu::timezone::{TimeZoneBcp47Id, TimeZoneInfo, UtcOffset, ZoneVariant};
use icu::datetime::TimeFormatter;
use icu::datetime::fieldset::V;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
let fmt = TimeFormatter::try_new(
&locale!("en").into(),
V::long(),
)
.unwrap();
// Time zone info for America/Chicago in the summer
let zone = TimeZoneBcp47Id(tinystr!(8, "uschi"))
.with_offset("-05".parse().ok())
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()))
.with_zone_variant(ZoneVariant::Daylight);
assert_try_writeable_eq!(
fmt.format(&zone),
"Central Time"
);
When a display name is unavailable, falls back to the location format:
use icu::calendar::{Date, Time};
use icu::timezone::{IxdtfParser, TimeZoneBcp47Id, TimeZoneInfo, UtcOffset, ZoneVariant};
use icu::calendar::Gregorian;
use icu::datetime::FixedCalendarDateTimeFormatter;
use icu::datetime::fieldset::V;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
// Time zone info for Europe/Istanbul
let zone = TimeZoneBcp47Id(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(),
V::short(),
)
.unwrap();
assert_try_writeable_eq!(
fmt.format(&zone),
"Türkiye Time"
);
Can also fall back to the UTC offset:
use icu::calendar::{Date, Time};
use icu::timezone::{TimeZoneInfo, UtcOffset, TimeZoneIdMapper, TimeZoneBcp47Id};
use icu::datetime::TimeFormatter;
use icu::datetime::fieldset::V;
use icu::datetime::DateTimeWriteError;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
// Set up the formatter
let mut tzf = TimeFormatter::try_new(
&locale!("en").into(),
V::short(),
)
.unwrap();
// "uschi" - has symbol data for short generic non-location
let time_zone = TimeZoneIdMapper::new()
.iana_to_bcp47("America/Chicago")
.with_offset("-05".parse().ok())
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_try_writeable_eq!(
tzf.format(&time_zone),
"CT"
);
// "ushnl" - has time zone override symbol data for short generic non-location
let time_zone = TimeZoneIdMapper::new()
.iana_to_bcp47("Pacific/Honolulu")
.with_offset("-10".parse().ok())
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_try_writeable_eq!(
tzf.format(&time_zone),
"HST"
);
// Mis-spelling of "America/Chicago" results in a fallback to offset format
let time_zone = TimeZoneIdMapper::new()
.iana_to_bcp47("America/Chigagou")
.with_offset("-05".parse().ok())
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()));
assert_try_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::calendar::{DateTime, Iso};
use icu::datetime::TimeFormatter;
use icu::datetime::fieldset::V;
use icu::timezone::{TimeZoneBcp47Id, UtcOffset};
use tinystr::tinystr;
use icu::locale::locale;
use writeable::assert_try_writeable_eq;
let time_zone_basic = TimeZoneBcp47Id(tinystr!(8, "uschi")).without_offset();
let formatter = TimeFormatter::try_new(
&locale!("en-US").into(),
V::medium(),
)
.unwrap();
// error[E0271]: type mismatch resolving `<Base as TimeZoneModel>::LocalTime == (Date<Iso>, Time)`
// note: required by a bound in `TimeFormatter::<C, FSet>::format`
formatter.format(&time_zone_basic);
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.length: NeoSkeletonLength
The desired length of the formatted string.
See: NeoSkeletonLength
Implementations§
source§impl V
impl V
sourcepub const fn with_length(length: NeoSkeletonLength) -> V
pub const fn with_length(length: NeoSkeletonLength) -> V
Creates a V skeleton with the given formatting length.
Trait Implementations§
source§impl DateTimeMarkers for V
impl DateTimeMarkers for V
source§type GluePatternV1Marker = NeverMarker<GluePatternV1<'static>>
type GluePatternV1Marker = NeverMarker<GluePatternV1<'static>>
Marker for loading the date/time glue pattern.
source§impl DateTimeNamesMarker for V
impl DateTimeNamesMarker for V
type YearNames = ()
type MonthNames = ()
type WeekdayNames = ()
type DayPeriodNames = ()
type ZoneEssentials = TimeZoneEssentialsV1Marker
type ZoneLocations = LocationsV1Marker
type ZoneGenericLong = MetazoneGenericNamesLongV1Marker
type ZoneGenericShort = MetazoneGenericNamesShortV1Marker
type ZoneSpecificLong = ()
type ZoneSpecificShort = ()
type MetazoneLookup = MetazonePeriodV1Marker
source§impl GetField<CompositeFieldSet> for V
impl GetField<CompositeFieldSet> for V
source§fn get_field(&self) -> CompositeFieldSet
fn get_field(&self) -> CompositeFieldSet
Returns the value of this trait’s field
T
.source§impl ZoneMarkers for V
impl ZoneMarkers for V
source§type TimeZoneIdInput = TimeZoneBcp47Id
type TimeZoneIdInput = TimeZoneBcp47Id
Marker for resolving the time zone id input field.
source§type TimeZoneOffsetInput = Option<UtcOffset>
type TimeZoneOffsetInput = Option<UtcOffset>
Marker for resolving the time zone offset input field.
source§type TimeZoneVariantInput = ()
type TimeZoneVariantInput = ()
Marker for resolving the time zone variant input field.
source§type TimeZoneLocalTimeInput = (Date<Iso>, Time)
type TimeZoneLocalTimeInput = (Date<Iso>, Time)
Marker for resolving the time zone non-location display names, which depend on the datetime.
source§type EssentialsV1Marker = TimeZoneEssentialsV1Marker
type EssentialsV1Marker = TimeZoneEssentialsV1Marker
Marker for loading core time zone data.
source§type LocationsV1Marker = LocationsV1Marker
type LocationsV1Marker = LocationsV1Marker
Marker for loading location names for time zone formatting
source§type GenericLongV1Marker = MetazoneGenericNamesLongV1Marker
type GenericLongV1Marker = MetazoneGenericNamesLongV1Marker
Marker for loading generic long time zone names.
source§type GenericShortV1Marker = MetazoneGenericNamesShortV1Marker
type GenericShortV1Marker = MetazoneGenericNamesShortV1Marker
Marker for loading generic short time zone names.
source§type SpecificLongV1Marker = NeverMarker<MetazoneSpecificNamesV1<'static>>
type SpecificLongV1Marker = NeverMarker<MetazoneSpecificNamesV1<'static>>
Marker for loading specific long time zone names.
source§type SpecificShortV1Marker = NeverMarker<MetazoneSpecificNamesV1<'static>>
type SpecificShortV1Marker = NeverMarker<MetazoneSpecificNamesV1<'static>>
Marker for loading generic short time zone names.
source§type MetazonePeriodV1Marker = MetazonePeriodV1Marker
type MetazonePeriodV1Marker = MetazonePeriodV1Marker
Marker for loading metazone periods.
impl Copy for V
impl Eq for V
impl StructuralPartialEq for V
impl UnstableSealed for V
Auto Trait Implementations§
impl Freeze for V
impl RefUnwindSafe for V
impl Send for V
impl Sync for V
impl Unpin for V
impl UnwindSafe for V
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
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)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>
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 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>
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