#[non_exhaustive]pub struct NeoTimeZoneSpecificShortMarker {
pub length: NeoSkeletonLength,
}
Expand description
“CDT” ⇒ specific time zone (only short), or raw offset if unavailable
§Examples
In NeoFormatter
:
use icu::calendar::{Date, Time};
use icu::timezone::{TimeZoneBcp47Id, TimeZoneInfo, UtcOffset, ZoneVariant};
use icu::datetime::neo::NeoFormatter;
use icu::datetime::neo_marker::NeoTimeZoneSpecificShortMarker;
use icu::datetime::neo_skeleton::NeoSkeletonLength;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
let fmt = NeoFormatter::<NeoTimeZoneSpecificShortMarker>::try_new(
&locale!("en").into(),
NeoTimeZoneSpecificShortMarker::with_length(NeoSkeletonLength::Short),
)
.unwrap();
// Time zone info for America/Chicago in the summer
let zone = TimeZoneInfo::from_id_and_offset(
TimeZoneBcp47Id(tinystr!(8, "uschi")),
UtcOffset::from_eighths_of_hour(-5 * 8),
)
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()))
.with_zone_variant(ZoneVariant::daylight());
assert_try_writeable_eq!(
fmt.convert_and_format(&zone),
"CDT"
);
use icu::calendar::{Date, Time};
use icu::timezone::{CustomZonedDateTime, TimeZoneBcp47Id, TimeZoneInfo, UtcOffset, ZoneVariant};
use icu::calendar::Gregorian;
use icu::datetime::neo::TypedNeoFormatter;
use icu::datetime::neo_marker::NeoTimeZoneSpecificShortMarker;
use icu::datetime::neo_skeleton::NeoSkeletonLength;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
let fmt = TypedNeoFormatter::<Gregorian, NeoTimeZoneSpecificShortMarker>::try_new(
&locale!("en").into(),
NeoTimeZoneSpecificShortMarker::with_length(NeoSkeletonLength::Short),
)
.unwrap();
// Time zone info for America/Chicago in the summer
let zone = TimeZoneInfo::from_id_and_offset(
TimeZoneBcp47Id(tinystr!(8, "uschi")),
UtcOffset::from_eighths_of_hour(-5 * 8),
)
.at_time((Date::try_new_iso(2022, 8, 29).unwrap(), Time::midnight()))
.with_zone_variant(ZoneVariant::daylight());
assert_try_writeable_eq!(
fmt.format(&zone),
"CDT"
);
This marker only loads data for the short length. Useful when combined with other fields:
use icu::calendar::{Date, Time};
use icu::timezone::{TimeZoneInfo, CustomZonedDateTime};
use icu::calendar::Gregorian;
use icu::datetime::neo::NeoFormatter;
use icu::datetime::neo_marker::NeoMonthDayMarker;
use icu::datetime::neo_marker::NeoHourMinuteMarker;
use icu::datetime::neo_marker::NeoTimeZoneSpecificShortMarker;
use icu::datetime::neo_marker::DateTimeCombo;
use icu::datetime::neo_skeleton::NeoSkeletonLength;
use icu::locale::locale;
use tinystr::tinystr;
use writeable::assert_try_writeable_eq;
type MyDateTimeZoneSet = DateTimeCombo<
NeoMonthDayMarker,
NeoHourMinuteMarker,
NeoTimeZoneSpecificShortMarker,
>;
let fmt = NeoFormatter::try_new(
&locale!("en-US").into(),
MyDateTimeZoneSet::with_length(NeoSkeletonLength::Long),
)
.unwrap();
let dtz = CustomZonedDateTime::try_from_str("2024-09-17T15:47:50-05:00[America/Chicago]").unwrap();
assert_try_writeable_eq!(
fmt.convert_and_format(&dtz),
"September 17, 3:47 PM CDT"
);
Don’t use long length if it is the only field:
use icu::calendar::Gregorian;
use icu::datetime::neo::TypedNeoFormatter;
use icu::datetime::neo_marker::NeoTimeZoneSpecificShortMarker;
use icu::datetime::neo_skeleton::NeoSkeletonLength;
use icu::datetime::LoadError;
use icu::locale::locale;
let result = TypedNeoFormatter::<Gregorian, _>::try_new(
&locale!("en").into(),
NeoTimeZoneSpecificShortMarker::with_length(NeoSkeletonLength::Long),
);
assert!(matches!(result, Err(LoadError::TypeTooNarrow(_))));
Only a full time zone info can be formatted with this style. For example, AtTime cannot be formatted.
ⓘ
use icu::calendar::{DateTime, Iso};
use icu::datetime::neo::TypedNeoFormatter;
use icu::datetime::neo_marker::NeoTimeZoneSpecificShortMarker;
use icu::datetime::neo_skeleton::NeoSkeletonLength;
use icu::timezone::{TimeZoneBcp47Id, UtcOffset, ZoneVariant};
use tinystr::tinystr;
use icu::locale::locale;
use writeable::assert_try_writeable_eq;
let datetime = DateTime::try_new_gregorian(2024, 10, 18, 0, 0, 0).unwrap();
let utc_offset = UtcOffset::from_eighths_of_hour(-6 * 8);
let time_zone_basic = utc_offset.with_id(TimeZoneBcp47Id(tinystr!(8, "uschi")));
let time_zone_at_time = time_zone_basic.at_time((datetime.date.to_iso(), datetime.time));
let formatter = TypedNeoFormatter::try_new(
&locale!("en-US").into(),
NeoTimeZoneSpecificShortMarker::with_length(NeoSkeletonLength::Medium),
)
.unwrap();
// error[E0271]: type mismatch resolving `<AtTime as TimeZoneModel>::ZoneVariant == ZoneVariant`
// note: required by a bound in `TypedNeoFormatter::<C, FSet>::format`
formatter.format(&time_zone_at_time);
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 NeoTimeZoneSpecificShortMarker
impl NeoTimeZoneSpecificShortMarker
sourcepub const fn with_length(length: NeoSkeletonLength) -> Self
pub const fn with_length(length: NeoSkeletonLength) -> Self
Creates a NeoTimeZoneSpecificShortMarker skeleton with the given formatting length.
Trait Implementations§
source§impl DateTimeMarkers for NeoTimeZoneSpecificShortMarker
impl DateTimeMarkers for NeoTimeZoneSpecificShortMarker
source§type D = NeoNeverMarker
type D = NeoNeverMarker
Associated types for date formatting. Read more
source§type T = NeoNeverMarker
type T = NeoNeverMarker
Associated types for time formatting. Read more
source§type Z = NeoTimeZoneSpecificShortMarker
type Z = NeoTimeZoneSpecificShortMarker
Associated types for time zone formatting. Read more
source§type LengthOption = NeoSkeletonLength
type LengthOption = NeoSkeletonLength
Type of the length option in the constructor.
source§type AlignmentOption = ()
type AlignmentOption = ()
Type of the alignment option in the constructor.
source§type YearStyleOption = ()
type YearStyleOption = ()
Type of the year style option in the constructor.
source§type FractionalSecondDigitsOption = ()
type FractionalSecondDigitsOption = ()
Type of the fractional seconds display option in the constructor.
source§type GluePatternV1Marker = NeverMarker<GluePatternV1<'static>>
type GluePatternV1Marker = NeverMarker<GluePatternV1<'static>>
Marker for loading the date/time glue pattern.
source§impl GetField<()> for NeoTimeZoneSpecificShortMarker
impl GetField<()> for NeoTimeZoneSpecificShortMarker
source§impl GetField<NeoSkeletonLength> for NeoTimeZoneSpecificShortMarker
impl GetField<NeoSkeletonLength> for NeoTimeZoneSpecificShortMarker
source§fn get_field(&self) -> NeoSkeletonLength
fn get_field(&self) -> NeoSkeletonLength
Returns the value of this trait’s field
T
.source§impl HasConstComponents for NeoTimeZoneSpecificShortMarker
impl HasConstComponents for NeoTimeZoneSpecificShortMarker
source§const COMPONENTS: NeoComponents = _
const COMPONENTS: NeoComponents = _
The associated components.
source§impl HasConstZoneComponent for NeoTimeZoneSpecificShortMarker
impl HasConstZoneComponent for NeoTimeZoneSpecificShortMarker
source§const COMPONENT: NeoTimeZoneStyle = NeoTimeZoneStyle::Specific
const COMPONENT: NeoTimeZoneStyle = NeoTimeZoneStyle::Specific
The associated component.
source§impl ZoneMarkers for NeoTimeZoneSpecificShortMarker
impl ZoneMarkers for NeoTimeZoneSpecificShortMarker
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 = ZoneVariant
type TimeZoneVariantInput = ZoneVariant
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 = NeverMarker<LocationsV1<'static>>
type LocationsV1Marker = NeverMarker<LocationsV1<'static>>
Marker for loading location names for time zone formatting
source§type GenericLongV1Marker = NeverMarker<MetazoneGenericNamesV1<'static>>
type GenericLongV1Marker = NeverMarker<MetazoneGenericNamesV1<'static>>
Marker for loading generic long time zone names.
source§type GenericShortV1Marker = NeverMarker<MetazoneGenericNamesV1<'static>>
type GenericShortV1Marker = NeverMarker<MetazoneGenericNamesV1<'static>>
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 = MetazoneSpecificNamesShortV1Marker
type SpecificShortV1Marker = MetazoneSpecificNamesShortV1Marker
Marker for loading generic short time zone names.
source§type MetazonePeriodV1Marker = MetazonePeriodV1Marker
type MetazonePeriodV1Marker = MetazonePeriodV1Marker
Marker for loading metazone periods.
impl UnstableSealed for NeoTimeZoneSpecificShortMarker
Auto Trait Implementations§
impl Freeze for NeoTimeZoneSpecificShortMarker
impl RefUnwindSafe for NeoTimeZoneSpecificShortMarker
impl Send for NeoTimeZoneSpecificShortMarker
impl Sync for NeoTimeZoneSpecificShortMarker
impl Unpin for NeoTimeZoneSpecificShortMarker
impl UnwindSafe for NeoTimeZoneSpecificShortMarker
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> 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