pub type LocalMktTime = NaiveTime;

Aliased Type§

struct LocalMktTime { /* private fields */ }

Implementations§

source§

impl NaiveTime

source

pub const fn from_hms(hour: u32, min: u32, sec: u32) -> NaiveTime

👎Deprecated since 0.4.23: use from_hms_opt() instead

Makes a new NaiveTime from hour, minute and second.

No leap second is allowed here; use NaiveTime::from_hms_* methods with a subsecond parameter instead.

Panics

Panics on invalid hour, minute and/or second.

source

pub const fn from_hms_opt(hour: u32, min: u32, sec: u32) -> Option<NaiveTime>

Makes a new NaiveTime from hour, minute and second.

No leap second is allowed here; use NaiveTime::from_hms_*_opt methods with a subsecond parameter instead.

Errors

Returns None on invalid hour, minute and/or second.

Example
use chrono::NaiveTime;

let from_hms_opt = NaiveTime::from_hms_opt;

assert!(from_hms_opt(0, 0, 0).is_some());
assert!(from_hms_opt(23, 59, 59).is_some());
assert!(from_hms_opt(24, 0, 0).is_none());
assert!(from_hms_opt(23, 60, 0).is_none());
assert!(from_hms_opt(23, 59, 60).is_none());
source

pub const fn from_hms_milli( hour: u32, min: u32, sec: u32, milli: u32 ) -> NaiveTime

👎Deprecated since 0.4.23: use from_hms_milli_opt() instead

Makes a new NaiveTime from hour, minute, second and millisecond.

The millisecond part can exceed 1,000 in order to represent the leap second.

Panics

Panics on invalid hour, minute, second and/or millisecond.

source

pub const fn from_hms_milli_opt( hour: u32, min: u32, sec: u32, milli: u32 ) -> Option<NaiveTime>

Makes a new NaiveTime from hour, minute, second and millisecond.

The millisecond part can exceed 1,000 in order to represent the leap second.

Errors

Returns None on invalid hour, minute, second and/or millisecond.

Example
use chrono::NaiveTime;

let from_hmsm_opt = NaiveTime::from_hms_milli_opt;

assert!(from_hmsm_opt(0, 0, 0, 0).is_some());
assert!(from_hmsm_opt(23, 59, 59, 999).is_some());
assert!(from_hmsm_opt(23, 59, 59, 1_999).is_some()); // a leap second after 23:59:59
assert!(from_hmsm_opt(24, 0, 0, 0).is_none());
assert!(from_hmsm_opt(23, 60, 0, 0).is_none());
assert!(from_hmsm_opt(23, 59, 60, 0).is_none());
assert!(from_hmsm_opt(23, 59, 59, 2_000).is_none());
source

pub const fn from_hms_micro( hour: u32, min: u32, sec: u32, micro: u32 ) -> NaiveTime

👎Deprecated since 0.4.23: use from_hms_micro_opt() instead

Makes a new NaiveTime from hour, minute, second and microsecond.

The microsecond part can exceed 1,000,000 in order to represent the leap second.

Panics

Panics on invalid hour, minute, second and/or microsecond.

source

pub const fn from_hms_micro_opt( hour: u32, min: u32, sec: u32, micro: u32 ) -> Option<NaiveTime>

Makes a new NaiveTime from hour, minute, second and microsecond.

The microsecond part can exceed 1,000,000 in order to represent the leap second.

Errors

Returns None on invalid hour, minute, second and/or microsecond.

Example
use chrono::NaiveTime;

let from_hmsu_opt = NaiveTime::from_hms_micro_opt;

assert!(from_hmsu_opt(0, 0, 0, 0).is_some());
assert!(from_hmsu_opt(23, 59, 59, 999_999).is_some());
assert!(from_hmsu_opt(23, 59, 59, 1_999_999).is_some()); // a leap second after 23:59:59
assert!(from_hmsu_opt(24, 0, 0, 0).is_none());
assert!(from_hmsu_opt(23, 60, 0, 0).is_none());
assert!(from_hmsu_opt(23, 59, 60, 0).is_none());
assert!(from_hmsu_opt(23, 59, 59, 2_000_000).is_none());
source

pub const fn from_hms_nano( hour: u32, min: u32, sec: u32, nano: u32 ) -> NaiveTime

👎Deprecated since 0.4.23: use from_hms_nano_opt() instead

Makes a new NaiveTime from hour, minute, second and nanosecond.

The nanosecond part can exceed 1,000,000,000 in order to represent the leap second.

Panics

Panics on invalid hour, minute, second and/or nanosecond.

source

pub const fn from_hms_nano_opt( hour: u32, min: u32, sec: u32, nano: u32 ) -> Option<NaiveTime>

Makes a new NaiveTime from hour, minute, second and nanosecond.

The nanosecond part can exceed 1,000,000,000 in order to represent the leap second.

Errors

Returns None on invalid hour, minute, second and/or nanosecond.

Example
use chrono::NaiveTime;

let from_hmsn_opt = NaiveTime::from_hms_nano_opt;

assert!(from_hmsn_opt(0, 0, 0, 0).is_some());
assert!(from_hmsn_opt(23, 59, 59, 999_999_999).is_some());
assert!(from_hmsn_opt(23, 59, 59, 1_999_999_999).is_some()); // a leap second after 23:59:59
assert!(from_hmsn_opt(24, 0, 0, 0).is_none());
assert!(from_hmsn_opt(23, 60, 0, 0).is_none());
assert!(from_hmsn_opt(23, 59, 60, 0).is_none());
assert!(from_hmsn_opt(23, 59, 59, 2_000_000_000).is_none());
source

pub const fn from_num_seconds_from_midnight(secs: u32, nano: u32) -> NaiveTime

👎Deprecated since 0.4.23: use from_num_seconds_from_midnight_opt() instead

Makes a new NaiveTime from the number of seconds since midnight and nanosecond.

The nanosecond part can exceed 1,000,000,000 in order to represent the leap second.

Panics

Panics on invalid number of seconds and/or nanosecond.

source

pub const fn from_num_seconds_from_midnight_opt( secs: u32, nano: u32 ) -> Option<NaiveTime>

Makes a new NaiveTime from the number of seconds since midnight and nanosecond.

The nanosecond part can exceed 1,000,000,000 in order to represent the leap second.

Errors

Returns None on invalid number of seconds and/or nanosecond.

Example
use chrono::NaiveTime;

let from_nsecs_opt = NaiveTime::from_num_seconds_from_midnight_opt;

assert!(from_nsecs_opt(0, 0).is_some());
assert!(from_nsecs_opt(86399, 999_999_999).is_some());
assert!(from_nsecs_opt(86399, 1_999_999_999).is_some()); // a leap second after 23:59:59
assert!(from_nsecs_opt(86_400, 0).is_none());
assert!(from_nsecs_opt(86399, 2_000_000_000).is_none());
source

pub fn parse_from_str(s: &str, fmt: &str) -> Result<NaiveTime, ParseError>

Parses a string with the specified format string and returns a new NaiveTime. See the format::strftime module on the supported escape sequences.

Example
use chrono::NaiveTime;

let parse_from_str = NaiveTime::parse_from_str;

assert_eq!(parse_from_str("23:56:04", "%H:%M:%S"),
           Ok(NaiveTime::from_hms_opt(23, 56, 4).unwrap()));
assert_eq!(parse_from_str("pm012345.6789", "%p%I%M%S%.f"),
           Ok(NaiveTime::from_hms_micro_opt(13, 23, 45, 678_900).unwrap()));

Date and offset is ignored for the purpose of parsing.

assert_eq!(parse_from_str("2014-5-17T12:34:56+09:30", "%Y-%m-%dT%H:%M:%S%z"),
           Ok(NaiveTime::from_hms_opt(12, 34, 56).unwrap()));

Leap seconds are correctly handled by treating any time of the form hh:mm:60 as a leap second. (This equally applies to the formatting, so the round trip is possible.)

assert_eq!(parse_from_str("08:59:60.123", "%H:%M:%S%.f"),
           Ok(NaiveTime::from_hms_milli_opt(8, 59, 59, 1_123).unwrap()));

Missing seconds are assumed to be zero, but out-of-bound times or insufficient fields are errors otherwise.

assert_eq!(parse_from_str("7:15", "%H:%M"),
           Ok(NaiveTime::from_hms_opt(7, 15, 0).unwrap()));

assert!(parse_from_str("04m33s", "%Mm%Ss").is_err());
assert!(parse_from_str("12", "%H").is_err());
assert!(parse_from_str("17:60", "%H:%M").is_err());
assert!(parse_from_str("24:00:00", "%H:%M:%S").is_err());

All parsed fields should be consistent to each other, otherwise it’s an error. Here %H is for 24-hour clocks, unlike %I, and thus can be independently determined without AM/PM.

assert!(parse_from_str("13:07 AM", "%H:%M %p").is_err());
source

pub fn parse_and_remainder<'a>( s: &'a str, fmt: &str ) -> Result<(NaiveTime, &'a str), ParseError>

Parses a string from a user-specified format into a new NaiveTime value, and a slice with the remaining portion of the string. See the format::strftime module on the supported escape sequences.

Similar to parse_from_str.

Example
let (time, remainder) = NaiveTime::parse_and_remainder(
    "3h4m33s trailing text", "%-Hh%-Mm%-Ss").unwrap();
assert_eq!(time, NaiveTime::from_hms_opt(3, 4, 33).unwrap());
assert_eq!(remainder, " trailing text");
source

pub fn overflowing_add_signed(&self, rhs: Duration) -> (NaiveTime, i64)

Adds given Duration to the current time, and also returns the number of seconds in the integral number of days ignored from the addition.

Example
use chrono::{Duration, NaiveTime};

let from_hms = |h, m, s| { NaiveTime::from_hms_opt(h, m, s).unwrap() };

assert_eq!(from_hms(3, 4, 5).overflowing_add_signed(Duration::hours(11)),
           (from_hms(14, 4, 5), 0));
assert_eq!(from_hms(3, 4, 5).overflowing_add_signed(Duration::hours(23)),
           (from_hms(2, 4, 5), 86_400));
assert_eq!(from_hms(3, 4, 5).overflowing_add_signed(Duration::hours(-7)),
           (from_hms(20, 4, 5), -86_400));
source

pub fn overflowing_sub_signed(&self, rhs: Duration) -> (NaiveTime, i64)

Subtracts given Duration from the current time, and also returns the number of seconds in the integral number of days ignored from the subtraction.

Example
use chrono::{Duration, NaiveTime};

let from_hms = |h, m, s| { NaiveTime::from_hms_opt(h, m, s).unwrap() };

assert_eq!(from_hms(3, 4, 5).overflowing_sub_signed(Duration::hours(2)),
           (from_hms(1, 4, 5), 0));
assert_eq!(from_hms(3, 4, 5).overflowing_sub_signed(Duration::hours(17)),
           (from_hms(10, 4, 5), 86_400));
assert_eq!(from_hms(3, 4, 5).overflowing_sub_signed(Duration::hours(-22)),
           (from_hms(1, 4, 5), -86_400));
source

pub fn signed_duration_since(self, rhs: NaiveTime) -> Duration

Subtracts another NaiveTime from the current time. Returns a Duration within +/- 1 day. This does not overflow or underflow at all.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when any of the NaiveTimes themselves represents a leap second in which case the assumption becomes that there are exactly one (or two) leap second(s) ever.

Example
use chrono::{Duration, NaiveTime};

let from_hmsm = |h, m, s, milli| { NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap() };
let since = NaiveTime::signed_duration_since;

assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(3, 5, 7, 900)),
           Duration::zero());
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(3, 5, 7, 875)),
           Duration::milliseconds(25));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(3, 5, 6, 925)),
           Duration::milliseconds(975));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(3, 5, 0, 900)),
           Duration::seconds(7));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(3, 0, 7, 900)),
           Duration::seconds(5 * 60));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(0, 5, 7, 900)),
           Duration::seconds(3 * 3600));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(4, 5, 7, 900)),
           Duration::seconds(-3600));
assert_eq!(since(from_hmsm(3, 5, 7, 900), from_hmsm(2, 4, 6, 800)),
           Duration::seconds(3600 + 60 + 1) + Duration::milliseconds(100));

Leap seconds are handled, but the subtraction assumes that there were no other leap seconds happened.

assert_eq!(since(from_hmsm(3, 0, 59, 1_000), from_hmsm(3, 0, 59, 0)),
           Duration::seconds(1));
assert_eq!(since(from_hmsm(3, 0, 59, 1_500), from_hmsm(3, 0, 59, 0)),
           Duration::milliseconds(1500));
assert_eq!(since(from_hmsm(3, 0, 59, 1_000), from_hmsm(3, 0, 0, 0)),
           Duration::seconds(60));
assert_eq!(since(from_hmsm(3, 0, 0, 0), from_hmsm(2, 59, 59, 1_000)),
           Duration::seconds(1));
assert_eq!(since(from_hmsm(3, 0, 59, 1_000), from_hmsm(2, 59, 59, 1_000)),
           Duration::seconds(61));
source

pub fn format_with_items<'a, I, B>(&self, items: I) -> DelayedFormat<I>where I: Iterator<Item = B> + Clone, B: Borrow<Item<'a>>,

Formats the time with the specified formatting items. Otherwise it is the same as the ordinary format method.

The Iterator of items should be Cloneable, since the resulting DelayedFormat value may be formatted multiple times.

Example
use chrono::NaiveTime;
use chrono::format::strftime::StrftimeItems;

let fmt = StrftimeItems::new("%H:%M:%S");
let t = NaiveTime::from_hms_opt(23, 56, 4).unwrap();
assert_eq!(t.format_with_items(fmt.clone()).to_string(), "23:56:04");
assert_eq!(t.format("%H:%M:%S").to_string(),             "23:56:04");

The resulting DelayedFormat can be formatted directly via the Display trait.

assert_eq!(format!("{}", t.format_with_items(fmt)), "23:56:04");
source

pub fn format<'a>(&self, fmt: &'a str) -> DelayedFormat<StrftimeItems<'a>>

Formats the time with the specified format string. See the format::strftime module on the supported escape sequences.

This returns a DelayedFormat, which gets converted to a string only when actual formatting happens. You may use the to_string method to get a String, or just feed it into print! and other formatting macros. (In this way it avoids the redundant memory allocation.)

A wrong format string does not issue an error immediately. Rather, converting or formatting the DelayedFormat fails. You are recommended to immediately use DelayedFormat for this reason.

Example
use chrono::NaiveTime;

let t = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!(t.format("%H:%M:%S").to_string(), "23:56:04");
assert_eq!(t.format("%H:%M:%S%.6f").to_string(), "23:56:04.012345");
assert_eq!(t.format("%-I:%M %p").to_string(), "11:56 PM");

The resulting DelayedFormat can be formatted directly via the Display trait.

assert_eq!(format!("{}", t.format("%H:%M:%S")), "23:56:04");
assert_eq!(format!("{}", t.format("%H:%M:%S%.6f")), "23:56:04.012345");
assert_eq!(format!("{}", t.format("%-I:%M %p")), "11:56 PM");
source

pub const MIN: NaiveTime = _

The earliest possible NaiveTime

Trait Implementations§

source§

impl Add<Duration> for NaiveTime

§

type Output = NaiveTime

The resulting type after applying the + operator.
source§

fn add(self, rhs: Duration) -> NaiveTime

Performs the + operation. Read more
source§

impl Add<Duration> for NaiveTime

An addition of Duration to NaiveTime wraps around and never overflows or underflows. In particular the addition ignores integral number of days.

As a part of Chrono’s leap second handling, the addition assumes that there is no leap second ever, except when the NaiveTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

Example

use chrono::{Duration, NaiveTime};

let from_hmsm = |h, m, s, milli| { NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap() };

assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::zero(),                  from_hmsm(3, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(1),              from_hmsm(3, 5, 8, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(-1),             from_hmsm(3, 5, 6, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(60 + 4),         from_hmsm(3, 6, 11, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(7*60*60 - 6*60), from_hmsm(9, 59, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::milliseconds(80),        from_hmsm(3, 5, 7, 80));
assert_eq!(from_hmsm(3, 5, 7, 950) + Duration::milliseconds(280),     from_hmsm(3, 5, 8, 230));
assert_eq!(from_hmsm(3, 5, 7, 950) + Duration::milliseconds(-980),    from_hmsm(3, 5, 6, 970));

The addition wraps around.

assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(22*60*60), from_hmsm(1, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::seconds(-8*60*60), from_hmsm(19, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) + Duration::days(800),         from_hmsm(3, 5, 7, 0));

Leap seconds are handled, but the addition assumes that it is the only leap second happened.

let leap = from_hmsm(3, 5, 59, 1_300);
assert_eq!(leap + Duration::zero(),             from_hmsm(3, 5, 59, 1_300));
assert_eq!(leap + Duration::milliseconds(-500), from_hmsm(3, 5, 59, 800));
assert_eq!(leap + Duration::milliseconds(500),  from_hmsm(3, 5, 59, 1_800));
assert_eq!(leap + Duration::milliseconds(800),  from_hmsm(3, 6, 0, 100));
assert_eq!(leap + Duration::seconds(10),        from_hmsm(3, 6, 9, 300));
assert_eq!(leap + Duration::seconds(-10),       from_hmsm(3, 5, 50, 300));
assert_eq!(leap + Duration::days(1),            from_hmsm(3, 5, 59, 300));
§

type Output = NaiveTime

The resulting type after applying the + operator.
source§

fn add(self, rhs: Duration) -> NaiveTime

Performs the + operation. Read more
source§

impl Add<FixedOffset> for NaiveTime

§

type Output = NaiveTime

The resulting type after applying the + operator.
source§

fn add(self, rhs: FixedOffset) -> NaiveTime

Performs the + operation. Read more
source§

impl AddAssign<Duration> for NaiveTime

source§

fn add_assign(&mut self, rhs: Duration)

Performs the += operation. Read more
source§

impl AddAssign<Duration> for NaiveTime

source§

fn add_assign(&mut self, rhs: Duration)

Performs the += operation. Read more
source§

impl Clone for NaiveTime

source§

fn clone(&self) -> NaiveTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NaiveTime

The Debug output of the naive time t is the same as t.format("%H:%M:%S%.f").

The string printed can be readily parsed via the parse method on str.

It should be noted that, for leap seconds not on the minute boundary, it may print a representation not distinguishable from non-leap seconds. This doesn’t matter in practice, since such leap seconds never happened. (By the time of the first leap second on 1972-06-30, every time zone offset around the world has standardized to the 5-minute alignment.)

Example

use chrono::NaiveTime;

assert_eq!(format!("{:?}", NaiveTime::from_hms_opt(23, 56, 4).unwrap()),              "23:56:04");
assert_eq!(format!("{:?}", NaiveTime::from_hms_milli_opt(23, 56, 4, 12).unwrap()),    "23:56:04.012");
assert_eq!(format!("{:?}", NaiveTime::from_hms_micro_opt(23, 56, 4, 1234).unwrap()),  "23:56:04.001234");
assert_eq!(format!("{:?}", NaiveTime::from_hms_nano_opt(23, 56, 4, 123456).unwrap()), "23:56:04.000123456");

Leap seconds may also be used.

assert_eq!(format!("{:?}", NaiveTime::from_hms_milli_opt(6, 59, 59, 1_500).unwrap()), "06:59:60.500");
source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for NaiveTime

The default value for a NaiveTime is midnight, 00:00:00 exactly.

Example

use chrono::NaiveTime;

let default_time = NaiveTime::default();
assert_eq!(default_time, NaiveTime::from_hms_opt(0, 0, 0).unwrap());
source§

fn default() -> NaiveTime

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for NaiveTime

source§

fn deserialize<D>( deserializer: D ) -> Result<NaiveTime, <D as Deserializer<'de>>::Error>where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for NaiveTime

The Display output of the naive time t is the same as t.format("%H:%M:%S%.f").

The string printed can be readily parsed via the parse method on str.

It should be noted that, for leap seconds not on the minute boundary, it may print a representation not distinguishable from non-leap seconds. This doesn’t matter in practice, since such leap seconds never happened. (By the time of the first leap second on 1972-06-30, every time zone offset around the world has standardized to the 5-minute alignment.)

Example

use chrono::NaiveTime;

assert_eq!(format!("{}", NaiveTime::from_hms_opt(23, 56, 4).unwrap()),              "23:56:04");
assert_eq!(format!("{}", NaiveTime::from_hms_milli_opt(23, 56, 4, 12).unwrap()),    "23:56:04.012");
assert_eq!(format!("{}", NaiveTime::from_hms_micro_opt(23, 56, 4, 1234).unwrap()),  "23:56:04.001234");
assert_eq!(format!("{}", NaiveTime::from_hms_nano_opt(23, 56, 4, 123456).unwrap()), "23:56:04.000123456");

Leap seconds may also be used.

assert_eq!(format!("{}", NaiveTime::from_hms_milli_opt(6, 59, 59, 1_500).unwrap()), "06:59:60.500");
source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl FromStr for NaiveTime

Parsing a str into a NaiveTime uses the same format, %H:%M:%S%.f, as in Debug and Display.

Example

use chrono::NaiveTime;

let t = NaiveTime::from_hms_opt(23, 56, 4).unwrap();
assert_eq!("23:56:04".parse::<NaiveTime>(), Ok(t));

let t = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!("23:56:4.012345678".parse::<NaiveTime>(), Ok(t));

let t = NaiveTime::from_hms_nano_opt(23, 59, 59, 1_234_567_890).unwrap(); // leap second
assert_eq!("23:59:60.23456789".parse::<NaiveTime>(), Ok(t));

// Seconds are optional
let t = NaiveTime::from_hms_opt(23, 56, 0).unwrap();
assert_eq!("23:56".parse::<NaiveTime>(), Ok(t));

assert!("foo".parse::<NaiveTime>().is_err());
§

type Err = ParseError

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<NaiveTime, ParseError>

Parses a string s to return a value of this type. Read more
source§

impl Hash for NaiveTime

source§

fn hash<__H>(&self, state: &mut __H)where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for NaiveTime

source§

fn cmp(&self, other: &NaiveTime) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<NaiveTime> for NaiveTime

source§

fn eq(&self, other: &NaiveTime) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<NaiveTime> for NaiveTime

source§

fn partial_cmp(&self, other: &NaiveTime) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for NaiveTime

source§

fn serialize<S>( &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub<Duration> for NaiveTime

§

type Output = NaiveTime

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Duration) -> NaiveTime

Performs the - operation. Read more
source§

impl Sub<Duration> for NaiveTime

A subtraction of Duration from NaiveTime wraps around and never overflows or underflows. In particular the addition ignores integral number of days. It is the same as the addition with a negated Duration.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when the NaiveTime itself represents a leap second in which case the assumption becomes that there is exactly a single leap second ever.

Example

use chrono::{Duration, NaiveTime};

let from_hmsm = |h, m, s, milli| { NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap() };

assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::zero(),                  from_hmsm(3, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::seconds(1),              from_hmsm(3, 5, 6, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::seconds(60 + 5),         from_hmsm(3, 4, 2, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::seconds(2*60*60 + 6*60), from_hmsm(0, 59, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::milliseconds(80),        from_hmsm(3, 5, 6, 920));
assert_eq!(from_hmsm(3, 5, 7, 950) - Duration::milliseconds(280),     from_hmsm(3, 5, 7, 670));

The subtraction wraps around.

assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::seconds(8*60*60), from_hmsm(19, 5, 7, 0));
assert_eq!(from_hmsm(3, 5, 7, 0) - Duration::days(800),        from_hmsm(3, 5, 7, 0));

Leap seconds are handled, but the subtraction assumes that it is the only leap second happened.

let leap = from_hmsm(3, 5, 59, 1_300);
assert_eq!(leap - Duration::zero(),            from_hmsm(3, 5, 59, 1_300));
assert_eq!(leap - Duration::milliseconds(200), from_hmsm(3, 5, 59, 1_100));
assert_eq!(leap - Duration::milliseconds(500), from_hmsm(3, 5, 59, 800));
assert_eq!(leap - Duration::seconds(60),       from_hmsm(3, 5, 0, 300));
assert_eq!(leap - Duration::days(1),           from_hmsm(3, 6, 0, 300));
§

type Output = NaiveTime

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Duration) -> NaiveTime

Performs the - operation. Read more
source§

impl Sub<FixedOffset> for NaiveTime

§

type Output = NaiveTime

The resulting type after applying the - operator.
source§

fn sub(self, rhs: FixedOffset) -> NaiveTime

Performs the - operation. Read more
source§

impl Sub<NaiveTime> for NaiveTime

Subtracts another NaiveTime from the current time. Returns a Duration within +/- 1 day. This does not overflow or underflow at all.

As a part of Chrono’s leap second handling, the subtraction assumes that there is no leap second ever, except when any of the NaiveTimes themselves represents a leap second in which case the assumption becomes that there are exactly one (or two) leap second(s) ever.

The implementation is a wrapper around NaiveTime::signed_duration_since.

Example

use chrono::{Duration, NaiveTime};

let from_hmsm = |h, m, s, milli| { NaiveTime::from_hms_milli_opt(h, m, s, milli).unwrap() };

assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 900), Duration::zero());
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 7, 875), Duration::milliseconds(25));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 6, 925), Duration::milliseconds(975));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 5, 0, 900), Duration::seconds(7));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(3, 0, 7, 900), Duration::seconds(5 * 60));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(0, 5, 7, 900), Duration::seconds(3 * 3600));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(4, 5, 7, 900), Duration::seconds(-3600));
assert_eq!(from_hmsm(3, 5, 7, 900) - from_hmsm(2, 4, 6, 800),
           Duration::seconds(3600 + 60 + 1) + Duration::milliseconds(100));

Leap seconds are handled, but the subtraction assumes that there were no other leap seconds happened.

assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 59, 0), Duration::seconds(1));
assert_eq!(from_hmsm(3, 0, 59, 1_500) - from_hmsm(3, 0, 59, 0),
           Duration::milliseconds(1500));
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(3, 0, 0, 0), Duration::seconds(60));
assert_eq!(from_hmsm(3, 0, 0, 0) - from_hmsm(2, 59, 59, 1_000), Duration::seconds(1));
assert_eq!(from_hmsm(3, 0, 59, 1_000) - from_hmsm(2, 59, 59, 1_000),
           Duration::seconds(61));
§

type Output = Duration

The resulting type after applying the - operator.
source§

fn sub(self, rhs: NaiveTime) -> Duration

Performs the - operation. Read more
source§

impl SubAssign<Duration> for NaiveTime

source§

fn sub_assign(&mut self, rhs: Duration)

Performs the -= operation. Read more
source§

impl SubAssign<Duration> for NaiveTime

source§

fn sub_assign(&mut self, rhs: Duration)

Performs the -= operation. Read more
source§

impl Timelike for NaiveTime

source§

fn hour(&self) -> u32

Returns the hour number from 0 to 23.

Example
use chrono::{NaiveTime, Timelike};

assert_eq!(NaiveTime::from_hms_opt(0, 0, 0).unwrap().hour(), 0);
assert_eq!(NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap().hour(), 23);
source§

fn minute(&self) -> u32

Returns the minute number from 0 to 59.

Example
use chrono::{NaiveTime, Timelike};

assert_eq!(NaiveTime::from_hms_opt(0, 0, 0).unwrap().minute(), 0);
assert_eq!(NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap().minute(), 56);
source§

fn second(&self) -> u32

Returns the second number from 0 to 59.

Example
use chrono::{NaiveTime, Timelike};

assert_eq!(NaiveTime::from_hms_opt(0, 0, 0).unwrap().second(), 0);
assert_eq!(NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap().second(), 4);

This method never returns 60 even when it is a leap second. (Why?) Use the proper formatting method to get a human-readable representation.

let leap = NaiveTime::from_hms_milli_opt(23, 59, 59, 1_000).unwrap();
assert_eq!(leap.second(), 59);
assert_eq!(leap.format("%H:%M:%S").to_string(), "23:59:60");
source§

fn nanosecond(&self) -> u32

Returns the number of nanoseconds since the whole non-leap second. The range from 1,000,000,000 to 1,999,999,999 represents the leap second.

Example
use chrono::{NaiveTime, Timelike};

assert_eq!(NaiveTime::from_hms_opt(0, 0, 0).unwrap().nanosecond(), 0);
assert_eq!(NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap().nanosecond(), 12_345_678);

Leap seconds may have seemingly out-of-range return values. You can reduce the range with time.nanosecond() % 1_000_000_000, or use the proper formatting method to get a human-readable representation.

let leap = NaiveTime::from_hms_milli_opt(23, 59, 59, 1_000).unwrap();
assert_eq!(leap.nanosecond(), 1_000_000_000);
assert_eq!(leap.format("%H:%M:%S%.9f").to_string(), "23:59:60.000000000");
source§

fn with_hour(&self, hour: u32) -> Option<NaiveTime>

Makes a new NaiveTime with the hour number changed.

Errors

Returns None if the value for hour is invalid.

Example
use chrono::{NaiveTime, Timelike};

let dt = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!(dt.with_hour(7), Some(NaiveTime::from_hms_nano_opt(7, 56, 4, 12_345_678).unwrap()));
assert_eq!(dt.with_hour(24), None);
source§

fn with_minute(&self, min: u32) -> Option<NaiveTime>

Makes a new NaiveTime with the minute number changed.

Errors

Returns None if the value for minute is invalid.

Example
use chrono::{NaiveTime, Timelike};

let dt = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!(dt.with_minute(45), Some(NaiveTime::from_hms_nano_opt(23, 45, 4, 12_345_678).unwrap()));
assert_eq!(dt.with_minute(60), None);
source§

fn with_second(&self, sec: u32) -> Option<NaiveTime>

Makes a new NaiveTime with the second number changed.

As with the second method, the input range is restricted to 0 through 59.

Errors

Returns None if the value for second is invalid.

Example
use chrono::{NaiveTime, Timelike};

let dt = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!(dt.with_second(17), Some(NaiveTime::from_hms_nano_opt(23, 56, 17, 12_345_678).unwrap()));
assert_eq!(dt.with_second(60), None);
source§

fn with_nanosecond(&self, nano: u32) -> Option<NaiveTime>

Makes a new NaiveTime with nanoseconds since the whole non-leap second changed.

As with the nanosecond method, the input range can exceed 1,000,000,000 for leap seconds.

Errors

Returns None if nanosecond >= 2,000,000,000.

Example
use chrono::{NaiveTime, Timelike};

let dt = NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap();
assert_eq!(dt.with_nanosecond(333_333_333),
           Some(NaiveTime::from_hms_nano_opt(23, 56, 4, 333_333_333).unwrap()));
assert_eq!(dt.with_nanosecond(2_000_000_000), None);

Leap seconds can theoretically follow any whole second. The following would be a proper leap second at the time zone offset of UTC-00:03:57 (there are several historical examples comparable to this “non-sense” offset), and therefore is allowed.

assert_eq!(dt.with_nanosecond(1_333_333_333),
           Some(NaiveTime::from_hms_nano_opt(23, 56, 4, 1_333_333_333).unwrap()));
source§

fn num_seconds_from_midnight(&self) -> u32

Returns the number of non-leap seconds past the last midnight.

Example
use chrono::{NaiveTime, Timelike};

assert_eq!(NaiveTime::from_hms_opt(1, 2, 3).unwrap().num_seconds_from_midnight(),
           3723);
assert_eq!(NaiveTime::from_hms_nano_opt(23, 56, 4, 12_345_678).unwrap().num_seconds_from_midnight(),
           86164);
assert_eq!(NaiveTime::from_hms_milli_opt(23, 59, 59, 1_000).unwrap().num_seconds_from_midnight(),
           86399);
source§

fn hour12(&self) -> (bool, u32)

Returns the hour number from 1 to 12 with a boolean flag, which is false for AM and true for PM.
source§

impl Copy for NaiveTime

source§

impl Eq for NaiveTime

source§

impl StructuralEq for NaiveTime

source§

impl StructuralPartialEq for NaiveTime