@@ -313,6 +313,24 @@ impl TimeDelta {
313
313
if self . secs < 0 && self . nanos > 0 { self . nanos - NANOS_PER_SEC } else { self . nanos }
314
314
}
315
315
316
+ /// Returns the number of microseconds in the fractional part of the duration.
317
+ ///
318
+ /// This is the number of microseconds such that
319
+ /// `subsec_micros() + num_seconds() * MICROS_PER_SEC` is the truncated number of
320
+ /// microseconds in the duration.
321
+ pub const fn subsec_micros ( & self ) -> i32 {
322
+ self . subsec_nanos ( ) / NANOS_PER_MICRO
323
+ }
324
+
325
+ /// Returns the number of milliseconds in the fractional part of the duration.
326
+ ///
327
+ /// This is the number of milliseconds such that
328
+ /// `subsec_millis() + num_seconds() * MILLIS_PER_SEC` is the truncated number of
329
+ /// milliseconds in the duration.
330
+ pub const fn subsec_millis ( & self ) -> i32 {
331
+ self . subsec_nanos ( ) / NANOS_PER_MILLI
332
+ }
333
+
316
334
/// Returns the total number of whole milliseconds in the `TimeDelta`.
317
335
pub const fn num_milliseconds ( & self ) -> i64 {
318
336
// A proper TimeDelta will not overflow, because MIN and MAX are defined such
@@ -779,6 +797,26 @@ mod tests {
779
797
assert_eq ! ( TimeDelta :: nanoseconds( 1_000_000_001 ) . subsec_nanos( ) , 1 ) ;
780
798
}
781
799
800
+ #[ test]
801
+ fn test_duration_subsec_micros ( ) {
802
+ assert_eq ! ( TimeDelta :: zero( ) . subsec_micros( ) , 0 ) ;
803
+ assert_eq ! ( TimeDelta :: microseconds( 1 ) . subsec_micros( ) , 1 ) ;
804
+ assert_eq ! ( TimeDelta :: microseconds( -1 ) . subsec_micros( ) , -1 ) ;
805
+ assert_eq ! ( TimeDelta :: seconds( 1 ) . subsec_micros( ) , 0 ) ;
806
+ assert_eq ! ( TimeDelta :: microseconds( 1_000_001 ) . subsec_micros( ) , 1 ) ;
807
+ assert_eq ! ( TimeDelta :: nanoseconds( 1_000_001_999 ) . subsec_micros( ) , 1 ) ;
808
+ }
809
+
810
+ #[ test]
811
+ fn test_duration_subsec_millis ( ) {
812
+ assert_eq ! ( TimeDelta :: zero( ) . subsec_millis( ) , 0 ) ;
813
+ assert_eq ! ( TimeDelta :: milliseconds( 1 ) . subsec_millis( ) , 1 ) ;
814
+ assert_eq ! ( TimeDelta :: milliseconds( -1 ) . subsec_millis( ) , -1 ) ;
815
+ assert_eq ! ( TimeDelta :: seconds( 1 ) . subsec_millis( ) , 0 ) ;
816
+ assert_eq ! ( TimeDelta :: milliseconds( 1_001 ) . subsec_millis( ) , 1 ) ;
817
+ assert_eq ! ( TimeDelta :: microseconds( 1_001_999 ) . subsec_millis( ) , 1 ) ;
818
+ }
819
+
782
820
#[ test]
783
821
fn test_duration_num_milliseconds ( ) {
784
822
assert_eq ! ( TimeDelta :: zero( ) . num_milliseconds( ) , 0 ) ;
0 commit comments