#cldr #icu #datetime #unicode #localization

icu_datetime

API for formatting date and time to user readable textual representation

4 releases (breaking)

0.4.0 Nov 2, 2021
0.3.0 Jul 30, 2021
0.2.0 Apr 29, 2021
0.1.0 Oct 15, 2020

#29 in Internationalization (i18n)

Download history 28/week @ 2021-08-11 49/week @ 2021-08-18 6/week @ 2021-08-25 15/week @ 2021-09-01 11/week @ 2021-09-08 27/week @ 2021-09-15 35/week @ 2021-09-22 20/week @ 2021-09-29 76/week @ 2021-10-06 45/week @ 2021-10-13 7/week @ 2021-10-20 47/week @ 2021-10-27 15/week @ 2021-11-03 5/week @ 2021-11-10 8/week @ 2021-11-17 21/week @ 2021-11-24

62 downloads per month
Used in 5 crates (3 directly)

Custom license

2MB
16K SLoC

icu_datetime crates.io

icu_datetime is one of the ICU4X components.

This API provides necessary functionality for formatting date and time to user readable textual representation.

[DateTimeFormat] is the main structure of the component. It accepts a set of arguments which allow it to collect necessary data from the DataProvider, and once instantiated, can be used to quickly format any date and time provided.

Examples

use icu::locid::Locale;
use icu::locid::macros::langid;
use icu::datetime::{DateTimeFormat, DateTimeFormatOptions, mock::parse_gregorian_from_str, options::length};

let provider = icu_testdata::get_provider();

let locale: Locale = langid!("en").into();

// See the next code example for a more ergonomic example with .into().
let options = DateTimeFormatOptions::Length(length::Bag {
    date: Some(length::Date::Medium),
    time: Some(length::Time::Short),
    ..Default::default()
});

let dtf = DateTimeFormat::try_new(locale, &provider, &options)
    .expect("Failed to create DateTimeFormat instance.");


let date = parse_gregorian_from_str("2020-09-12T12:35:00")
    .expect("Failed to parse date.");

let formatted_date = dtf.format(&date);
assert_eq!(formatted_date.to_string(), "Sep 12, 2020, 12:35 PM");

The options can be created more ergonomically using the Into trait to automatically convert a [options::length::Bag] into a [DateTimeFormatOptions::Length].

use icu::locid::Locale;
use icu::locid::macros::langid;
use icu::datetime::{DateTimeFormat, DateTimeFormatOptions, options::length};
let options = length::Bag {
    date: Some(length::Date::Medium),
    time: Some(length::Time::Short),
    ..Default::default()
}.into();

let dtf = DateTimeFormat::try_new(locale, &provider, &options);

At the moment, the crate provides only options using the Length bag, but in the future, we expect to add more ways to customize the output, like skeletons, and components.

Notice: Rust at the moment does not have a canonical way to represent date and time. We use DateTime as an example of the data necessary for ICU [DateTimeFormat] to work, and we hope to work with the community to develop core date and time APIs that will work as an input for this component. DateTime additionally has support for non-Gregorian calendars, which this module will eventually be able to format.

More Information

For more information on development, authorship, contributing etc. please visit ICU4X home page.

Dependencies