devela::_dep::jiff::fmt::strtime

Function format

pub fn format(
    format: impl AsRef<[u8]>,
    broken_down_time: impl Into<BrokenDownTime>,
) -> Result<String, Error> 
Available on crate features dep_jiff and alloc only.
Expand description

Format the given broken down time using the format string given.

See the module documentation for details on what’s supported.

This routine is like BrokenDownTime::format, but may be more convenient to call. Also, it returns a String instead of accepting a fmt::Write trait implementation to write to.

Note that broken_down_time can be anything that can be converted into it. This includes, for example, Zoned, Timestamp, DateTime, Date and Time.

§Errors

This returns an error when formatting failed. Formatting can fail either because of an invalid format string, or if formatting requires a field in BrokenDownTime to be set that isn’t. For example, trying to format a DateTime with the %z specifier will fail because a DateTime has no time zone or offset information associated with it.

§Example

This example shows how to format a Zoned into something resembling a RFC 2822 datetime:

use jiff::{civil::date, fmt::strtime, tz};

let zdt = date(2024, 7, 15).at(16, 24, 59, 0).intz("America/New_York")?;
let string = strtime::format("%a, %-d %b %Y %T %z", &zdt)?;
assert_eq!(string, "Mon, 15 Jul 2024 16:24:59 -0400");

Of course, one should prefer using the fmt::rfc2822 module, which contains a dedicated RFC 2822 printer.

§Example: date-like output

While the output of the Unix date command is likely locale specific, this is what it looks like on my system:

use jiff::{civil::date, fmt::strtime, tz};

let zdt = date(2024, 7, 15).at(16, 24, 59, 0).intz("America/New_York")?;
let string = strtime::format("%a %b %e %I:%M:%S %p %Z %Y", &zdt)?;
assert_eq!(string, "Mon Jul 15 04:24:59 PM EDT 2024");

§Example: RFC 3339 compatible output with fractional seconds

use jiff::{civil::date, fmt::strtime, tz};

let zdt = date(2024, 7, 15)
    .at(16, 24, 59, 123_456_789)
    .intz("America/New_York")?;
let string = strtime::format("%Y-%m-%dT%H:%M:%S%.f%:z", &zdt)?;
assert_eq!(string, "2024-07-15T16:24:59.123456789-04:00");