pub struct DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,{ /* private fields */ }
Expand description
A low-level type that formats datetime patterns with localized names. The calendar is chosen in the constructor at runtime.
Currently this only supports loading of non-calendar-specific names, but additional functions may be added in the future. If you need this, see https://github.com/unicode-org/icu4x/issues/6107
Implementations§
Source§impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
Sourcepub fn try_new_with_calendar_without_number_formatting(
prefs: DateTimeFormatterPreferences,
calendar: AnyCalendar,
) -> Result<DateTimeNames<FSet>, UnsupportedCalendarError>
pub fn try_new_with_calendar_without_number_formatting( prefs: DateTimeFormatterPreferences, calendar: AnyCalendar, ) -> Result<DateTimeNames<FSet>, UnsupportedCalendarError>
Creates a completely empty instance, not even with number formatting, with the specified calendar.
Sourcepub fn from_formatter(
prefs: DateTimeFormatterPreferences,
formatter: DateTimeFormatter<FSet>,
) -> DateTimeNames<FSet>
pub fn from_formatter( prefs: DateTimeFormatterPreferences, formatter: DateTimeFormatter<FSet>, ) -> DateTimeNames<FSet>
Creates an instance with the names and calendar loaded in a DateTimeFormatter
.
This function requires passing in the DateTimeFormatterPreferences
because it is not
retained in the formatter. Pass the same value or else unexpected behavior may occur.
§Examples
use icu::datetime::input::Date;
use icu::datetime::input::{DateTime, Time};
use icu::datetime::DateTimeFormatter;
use icu::datetime::fieldsets::{YMD, YMDT};
use icu::datetime::pattern::{DateTimeNames, DayPeriodNameLength};
use icu::locale::locale;
use writeable::assert_writeable_eq;
let prefs = locale!("es-MX").into();
let formatter =
DateTimeFormatter::try_new(
prefs,
YMD::long(),
)
.unwrap();
assert_writeable_eq!(
formatter.format(&Date::try_new_iso(2025, 2, 13).unwrap()),
"13 de febrero de 2025"
);
// Change the YMD formatter to a YMDT formatter, after loading day period names.
// This assumes that the locale uses Abbreviated names for the given semantic skeleton!
let mut names = DateTimeNames::from_formatter(prefs, formatter).cast_into_fset::<YMDT>();
names.as_mut().include_day_period_names(DayPeriodNameLength::Abbreviated).unwrap();
let formatter = names.try_into_formatter(YMD::long().with_time_hm()).unwrap();
assert_writeable_eq!(
formatter.format(&DateTime {
date: Date::try_new_iso(2025, 2, 13).unwrap(),
time: Time::start_of_day(),
}),
"13 de febrero de 2025, 12:00 a.m."
);
Source§impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeMarkers + GetField<CompositeFieldSet>,
<FSet as DateTimeMarkers>::D: DateDataMarkers,
<FSet as DateTimeMarkers>::T: TimeMarkers,
<FSet as DateTimeMarkers>::Z: ZoneMarkers,
impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeMarkers + GetField<CompositeFieldSet>,
<FSet as DateTimeMarkers>::D: DateDataMarkers,
<FSet as DateTimeMarkers>::T: TimeMarkers,
<FSet as DateTimeMarkers>::Z: ZoneMarkers,
Sourcepub fn try_into_formatter(
self,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
Baked: AllAnyCalendarPatternDataMarkers<FSet>,
pub fn try_into_formatter(
self,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
Baked: AllAnyCalendarPatternDataMarkers<FSet>,
Loads a pattern for the given field set with compiled data and returns a DateTimeFormatter
.
The names in the current DateTimeNames
must be sufficient for the field set.
If not, the input object will be returned with an error.
✨ Enabled with the compiled_data
Cargo feature.
§Examples
use icu::calendar::{AnyCalendar, AnyCalendarKind};
use icu::datetime::fieldsets::T;
use icu::datetime::input::Time;
use icu::datetime::pattern::{DateTimeNames, DayPeriodNameLength};
use icu::locale::locale;
use writeable::assert_writeable_eq;
let kind = AnyCalendarKind::new(locale!("es-MX").into());
let calendar = AnyCalendar::new(kind);
let names = DateTimeNames::try_new_with_calendar_without_number_formatting(
locale!("es-MX").into(),
calendar,
)
.expect("All locale-default calendars are supported");
let field_set = T::hm();
// Cannot convert yet: no names are loaded
let mut names = names.try_into_formatter(field_set).unwrap_err().1;
// Load the data we need:
names
.as_mut()
.include_day_period_names(DayPeriodNameLength::Abbreviated)
.unwrap();
names.as_mut().include_decimal_formatter().unwrap();
// Now the conversion is successful:
let formatter = names.try_into_formatter(field_set).unwrap();
assert_writeable_eq!(formatter.format(&Time::start_of_day()), "12:00 a.m.");
Sourcepub fn try_into_formatter_unstable<P>(
self,
provider: &P,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
P: AllAnyCalendarPatternDataMarkers<FSet> + ?Sized,
pub fn try_into_formatter_unstable<P>(
self,
provider: &P,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
P: AllAnyCalendarPatternDataMarkers<FSet> + ?Sized,
A version of Self::try_into_formatter
that uses custom data provided by a DataProvider
.
Sourcepub fn try_into_formatter_with_buffer_provider<P>(
self,
provider: &P,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
P: BufferProvider + ?Sized,
pub fn try_into_formatter_with_buffer_provider<P>(
self,
provider: &P,
field_set: FSet,
) -> Result<DateTimeFormatter<FSet>, (DateTimeFormatterLoadError, DateTimeNames<FSet>)>where
P: BufferProvider + ?Sized,
A version of Self::try_into_formatter
that uses custom data provided by a BufferProvider
.
✨ Enabled with the serde
feature.
Source§impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
impl<FSet> DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
Sourcepub fn cast_into_fset<FSet2>(self) -> DateTimeNames<FSet2>where
FSet2: DateTimeNamesFrom<FSet>,
pub fn cast_into_fset<FSet2>(self) -> DateTimeNames<FSet2>where
FSet2: DateTimeNamesFrom<FSet>,
Maps a FixedCalendarDateTimeNames
of a specific FSet
to a more general FSet
.
For example, this can transform a formatter for DateFieldSet
to one for
CompositeDateTimeFieldSet
.
Trait Implementations§
Source§impl<FSet> AsMut<FixedCalendarDateTimeNames<(), FSet>> for DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
impl<FSet> AsMut<FixedCalendarDateTimeNames<(), FSet>> for DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
Source§fn as_mut(&mut self) -> &mut FixedCalendarDateTimeNames<(), FSet>
fn as_mut(&mut self) -> &mut FixedCalendarDateTimeNames<(), FSet>
Source§impl<FSet> AsRef<FixedCalendarDateTimeNames<(), FSet>> for DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
impl<FSet> AsRef<FixedCalendarDateTimeNames<(), FSet>> for DateTimeNames<FSet>where
FSet: DateTimeNamesMarker,
Source§fn as_ref(&self) -> &FixedCalendarDateTimeNames<(), FSet>
fn as_ref(&self) -> &FixedCalendarDateTimeNames<(), FSet>
Source§impl<FSet> Clone for DateTimeNames<FSet>where
FSet: Clone + DateTimeNamesMarker,
impl<FSet> Clone for DateTimeNames<FSet>where
FSet: Clone + DateTimeNamesMarker,
Source§fn clone(&self) -> DateTimeNames<FSet>
fn clone(&self) -> DateTimeNames<FSet>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<FSet> Freeze for DateTimeNames<FSet>where
<<FSet as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::WeekdayNames as NamesContainer<DatetimeNamesWeekdayV1, WeekdayNameLength>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DatetimeNamesDayperiodV1, DayPeriodNameLength>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimezoneNamesEssentialsV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<TimezoneNamesLocationsRootV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneLocations as NamesContainer<TimezoneNamesLocationsOverrideV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<TimezoneNamesCitiesRootV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<TimezoneNamesCitiesOverrideV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<TimezoneNamesGenericLongV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<TimezoneNamesGenericShortV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<TimezoneNamesStandardLongV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<TimezoneNamesSpecificLongV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<TimezoneNamesSpecificShortV1, ()>>::Container: Freeze,
<<FSet as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<TimezoneMetazonePeriodsV1, ()>>::Container: Freeze,
impl<FSet> RefUnwindSafe for DateTimeNames<FSet>where
<<FSet as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::WeekdayNames as NamesContainer<DatetimeNamesWeekdayV1, WeekdayNameLength>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DatetimeNamesDayperiodV1, DayPeriodNameLength>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimezoneNamesEssentialsV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<TimezoneNamesLocationsRootV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneLocations as NamesContainer<TimezoneNamesLocationsOverrideV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<TimezoneNamesCitiesRootV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<TimezoneNamesCitiesOverrideV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<TimezoneNamesGenericLongV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<TimezoneNamesGenericShortV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<TimezoneNamesStandardLongV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<TimezoneNamesSpecificLongV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<TimezoneNamesSpecificShortV1, ()>>::Container: RefUnwindSafe,
<<FSet as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<TimezoneMetazonePeriodsV1, ()>>::Container: RefUnwindSafe,
FSet: RefUnwindSafe,
impl<FSet> !Send for DateTimeNames<FSet>
impl<FSet> !Sync for DateTimeNames<FSet>
impl<FSet> Unpin for DateTimeNames<FSet>where
<<FSet as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::WeekdayNames as NamesContainer<DatetimeNamesWeekdayV1, WeekdayNameLength>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DatetimeNamesDayperiodV1, DayPeriodNameLength>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimezoneNamesEssentialsV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<TimezoneNamesLocationsRootV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneLocations as NamesContainer<TimezoneNamesLocationsOverrideV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<TimezoneNamesCitiesRootV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<TimezoneNamesCitiesOverrideV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<TimezoneNamesGenericLongV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<TimezoneNamesGenericShortV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<TimezoneNamesStandardLongV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<TimezoneNamesSpecificLongV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<TimezoneNamesSpecificShortV1, ()>>::Container: Unpin,
<<FSet as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<TimezoneMetazonePeriodsV1, ()>>::Container: Unpin,
FSet: Unpin,
impl<FSet> UnwindSafe for DateTimeNames<FSet>where
<<FSet as DateTimeNamesMarker>::YearNames as NamesContainer<YearNamesV1, YearNameLength>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::MonthNames as NamesContainer<MonthNamesV1, MonthNameLength>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::WeekdayNames as NamesContainer<DatetimeNamesWeekdayV1, WeekdayNameLength>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::DayPeriodNames as NamesContainer<DatetimeNamesDayperiodV1, DayPeriodNameLength>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneEssentials as NamesContainer<TimezoneNamesEssentialsV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneLocationsRoot as NamesContainer<TimezoneNamesLocationsRootV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneLocations as NamesContainer<TimezoneNamesLocationsOverrideV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneExemplarsRoot as NamesContainer<TimezoneNamesCitiesRootV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneExemplars as NamesContainer<TimezoneNamesCitiesOverrideV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneGenericLong as NamesContainer<TimezoneNamesGenericLongV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneGenericShort as NamesContainer<TimezoneNamesGenericShortV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneStandardLong as NamesContainer<TimezoneNamesStandardLongV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneSpecificLong as NamesContainer<TimezoneNamesSpecificLongV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::ZoneSpecificShort as NamesContainer<TimezoneNamesSpecificShortV1, ()>>::Container: UnwindSafe,
<<FSet as DateTimeNamesMarker>::MetazoneLookup as NamesContainer<TimezoneMetazonePeriodsV1, ()>>::Container: UnwindSafe,
FSet: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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>
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