Skip to content

Commit 91f67fd

Browse files
committed
Add Instant::saturating_duration_since
1 parent d15c358 commit 91f67fd

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/libstd/time.rs

+28
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,27 @@ impl Instant {
243243
}
244244
}
245245

246+
/// Returns the amount of time elapsed from another instant to this one,
247+
/// or zero duration if that instant is earlier than this one.
248+
///
249+
/// # Examples
250+
///
251+
/// ```no_run
252+
/// #![feature(checked_duration_since)]
253+
/// use std::time::{Duration, Instant};
254+
/// use std::thread::sleep;
255+
///
256+
/// let now = Instant::now();
257+
/// sleep(Duration::new(1, 0));
258+
/// let new_now = Instant::now();
259+
/// println!("{:?}", new_now.saturating_duration_since(now));
260+
/// println!("{:?}", now.saturating_duration_since(new_now)); // 0ns
261+
/// ```
262+
#[unstable(feature = "checked_duration_since", issue = "58402")]
263+
pub fn saturating_duration_since(&self, earlier: Instant) -> Duration {
264+
self.checked_duration_since(earlier).unwrap_or(Duration::new(0, 0))
265+
}
266+
246267
/// Returns the amount of time elapsed since this instant was created.
247268
///
248269
/// # Panics
@@ -658,6 +679,13 @@ mod tests {
658679
assert_eq!(ret, None);
659680
}
660681

682+
#[test]
683+
fn saturating_instant_duration_nopanic() {
684+
let a = Instant::now();
685+
let ret = (a - Duration::new(1, 0)).saturating_duration_since(a);
686+
assert_eq!(ret, Duration::new(0,0));
687+
}
688+
661689
#[test]
662690
fn system_time_math() {
663691
let a = SystemTime::now();

0 commit comments

Comments
 (0)