Time

Contents
SystemTime::now
Instant stopwatches
Duration math
Elapsed helper

SystemTime::now

The clock on the wall is SystemTime, and now reads it. The value is opaque on purpose, because wall clocks can jump backwards:

use std::time::SystemTime; fn main() { let start = SystemTime::now(); println!("{:?}", start); }

Debug output shows the raw timestamp. SystemTime is for talking to the outside world, never for measuring speed.

Instant stopwatches

For measuring speed use Instant, a stopwatch that only moves forward. Read it once, do the work, then ask how much time passed:

use std::time::Instant; fn main() { let t0 = Instant::now(); let mut sum: u64 = 0; for i in 0..1000 { sum += i; } println!("sum: {} in {:?}", sum, t0.elapsed()); }

Duration math

A Duration is a span of time with friendly constructors. Build values, add them, and read them back in any unit you need:

use std::time::Duration; fn main() { let wait = Duration::from_secs(2) + Duration::from_millis(500); println!("secs: {}", wait.as_secs()); println!("millis: {}", wait.as_millis()); }

Adding durations is plain addition with plus. Convert with as_secs or as_millis depending on the precision you need.

Elapsed helper

Most programs repeat the same stopwatch dance, so wrap it in a helper. Pass the start time by reference and get seconds back as a float:

use std::time::Instant; fn elapsed_secs(t0: &Instant) -> f64 { t0.elapsed().as_secs_f64() } fn main() { let t0 = Instant::now(); println!("lap: {}", elapsed_secs(&t0)); }

One helper keeps every benchmark in the program consistent. Parsing lessons next give the stopwatch something to measure.

Next: Parsing strings

Article author: Arthur Isaev

Related articles
Rust
Rust course: zero to hero in 50 lessons
What is Rust and where it runs
Install Rust
cargo new
Your first program
Variables
Numbers
Strings
Booleans
Tuples
Arrays
Vectors
Slices
if and else
match
Loops
Ownership
Borrowing
Lifetimes
Functions
Structs
Enums in Rust
Advanced match in Rust
Option combinators in Rust
Result and the question mark in Rust
Advanced strings in Rust
Vec methods in Rust
HashMaps in Rust
Modules in Rust
Crates and workspaces in Rust
Testing in Rust
Error handling
Traits
Generics
Trait bounds
Closures
Iterators
Smart pointers
Threads
Mutex and Arc
Files
CLI arguments
Environment variables
Diagnostics
Time
Parsing strings
TCP networking
Capstone: wordfreq CLI
Capstone: tiny HTTP server
Modern Rust tour
Hero roadmap: the whole course on one page
Install Rust on Windows 11
Install Rust on Ubuntu
Install Rust on Rocky Linux
Install Rust on macOS
Install Rust on FreeBSD
Rust in Docker

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: