Module icu::datetime::parts

source ·
Expand description

Parts of a formatted date/time.

§Examples

use icu::calendar::Gregorian;
use icu::calendar::{Date, Time};
use icu::datetime::parts as datetime_parts;
use icu::datetime::fieldsets;
use icu::datetime::options::FractionalSecondDigits;
use icu::datetime::options::TimePrecision;
use icu::datetime::DateTimeFormatter;
use icu::decimal::parts as decimal_parts;
use icu::locale::locale;
use icu::timezone::IxdtfParser;
use writeable::assert_writeable_parts_eq;

let dtf = DateTimeFormatter::try_new(
    locale!("en-u-ca-buddhist").into(),
    fieldsets::YMDT::medium().with_time_precision(TimePrecision::SecondExact(FractionalSecondDigits::F2)).with_zone_specific(),
)
.unwrap();

let dtz = IxdtfParser::new().try_from_str("2023-11-20T11:35:03.5+00:00[Europe/London]").unwrap();

// Missing data is filled in on a best-effort basis, and an error is signaled.
assert_writeable_parts_eq!(
    dtf.format_any_calendar(&dtz),
    "Nov 20, 2566 BE, 11:35:03.50 AM GMT",
    [
        (0, 3, datetime_parts::MONTH),
        (4, 6, decimal_parts::INTEGER),
        (4, 6, datetime_parts::DAY),
        (8, 12, decimal_parts::INTEGER),
        (8, 12, datetime_parts::YEAR),
        (13, 15, datetime_parts::ERA),
        (17, 19, decimal_parts::INTEGER),
        (17, 19, datetime_parts::HOUR),
        (20, 22, decimal_parts::INTEGER),
        (20, 22, datetime_parts::MINUTE),
        (23, 28, datetime_parts::SECOND),
        (23, 25, decimal_parts::INTEGER),
        (25, 26, decimal_parts::DECIMAL),
        (26, 28, decimal_parts::FRACTION),
        // note: from 28 to 31 is a NNBSP
        (31, 33, datetime_parts::DAY_PERIOD),
        (34, 37, datetime_parts::TIME_ZONE_NAME),
    ]
);

Constants§