17 个版本 (10 个稳定版)
1.5.1 | 2024年6月6日 |
---|---|
1.4.0 | 2023年11月16日 |
1.2.1 | 2023年4月23日 |
1.1.0 | 2023年1月26日 |
0.1.0 | 2020年10月15日 |
在 国际化 (i18n) 中排名第 115
每月下载量 73,544
在 31 个 包中使用(直接使用 12 个)
4MB
59K SLoC
icu_datetime
日期和时间格式化。
此模块作为一个独立的包(icu_datetime
)以及 icu
包的一部分发布。有关 ICU4X 项目更多详细信息,请参阅后者。
TypedDateTimeFormatter
和 DateTimeFormatter
是组件的主要类型。它们接受一组参数,允许从 数据提供者 收集必要的数据,一旦实例化,就可以用于快速格式化提供的任何日期和时间。这些类型的变体可以格式化更多或更少的组件,包括 TypedDateFormatter
& DateFormatter
、TypedZonedDateTimeFormatter
& ZonedDateTimeFormatter
、TimeFormatter
和 TimeZoneFormatter
这些格式化程序与来自 calendar
模块的类型一起工作,例如 Date
、DateTime
和 Time
,以及 timezone::CustomTimeZone
,然而,只要其他类型实现了来自 input
模块的特性和,也可以使用。
日期相关格式化程序的每个实例(即非 TimeFormatter
或 TimeZoneFormatter
)都与特定的 Calendar
相关联。区分“类型化”与未类型化格式化程序是为了帮助实现这一点。例如,如果您在编译时知道您将仅格式化格里历日期,则可以使用 TypedDateTimeFormatter<Gregorian>
,并且 API 将确保只使用与日历相关的格里历 DateTime
。另一方面,如果您希望在运行时选择日历,则可以使用指定在区域设置中的日历的 DateTimeFormatter
,并使用它与 DateTime
、AnyCalendar
一起。这些格式化程序仍然需要与适当日历关联的日期(尽管如果提供,它们将转换 ISO 日期),它们只是不强制程序员在编译时选择日历。
示例
use icu::calendar::{DateTime, Gregorian};
use icu::datetime::{
options::length, DateTimeFormatter, DateTimeFormatterOptions,
TypedDateTimeFormatter,
};
use icu::locid::{locale, Locale};
use std::str::FromStr;
use writeable::assert_writeable_eq;
// See the next code example for a more ergonomic example with .into().
let options =
DateTimeFormatterOptions::Length(length::Bag::from_date_time_style(
length::Date::Medium,
length::Time::Short,
));
// You can work with a formatter that can select the calendar at runtime:
let locale = Locale::from_str("en-u-ca-gregory").unwrap();
let dtf = DateTimeFormatter::try_new(&locale.into(), options.clone())
.expect("Failed to create DateTimeFormatter instance.");
// Or one that selects a calendar at compile time:
let typed_dtf = TypedDateTimeFormatter::<Gregorian>::try_new(
&locale!("en").into(),
options,
)
.expect("Failed to create TypedDateTimeFormatter instance.");
let typed_date =
DateTime::try_new_gregorian_datetime(2020, 9, 12, 12, 34, 28).unwrap();
// prefer using ISO dates with DateTimeFormatter
let date = typed_date.to_iso().to_any();
let formatted_date = dtf.format(&date).expect("Calendars should match");
let typed_formatted_date = typed_dtf.format(&typed_date);
assert_writeable_eq!(formatted_date, "Sep 12, 2020, 12:34 PM");
assert_writeable_eq!(typed_formatted_date, "Sep 12, 2020, 12:34 PM");
let formatted_date_string =
dtf.format_to_string(&date).expect("Calendars should match");
let typed_formatted_date_string = typed_dtf.format_to_string(&typed_date);
assert_eq!(formatted_date_string, "Sep 12, 2020, 12:34 PM");
assert_eq!(typed_formatted_date_string, "Sep 12, 2020, 12:34 PM");
可以使用 Into
特性更方便地创建选项,自动将 options::length::Bag
转换为 DateTimeFormatterOptions::Length
。
use icu::calendar::Gregorian;
use icu::datetime::{
options::length, DateTimeFormatterOptions, TypedDateTimeFormatter,
};
use icu::locid::locale;
let options = length::Bag::from_date_time_style(
length::Date::Medium,
length::Time::Short,
)
.into();
let dtf = TypedDateTimeFormatter::<Gregorian>::try_new(
&locale!("en").into(),
options,
);
目前,该软件包只提供使用 Length
包的选项,但预计将来会添加更多自定义输出的方式,如骨架和组件。
更多信息
有关开发、作者、贡献等更多信息,请访问 ICU4X 主页
。