如何使用Rust的Chrono库找到时间差

10

我有一个Rust程序,想要进行一些简单的基准测试,需要记录开始时间和结束时间!

use chrono::{NaiveTime, Utc};

fn main() {
    let start_time: NaiveTime = Utc::now().time();
    let end_time: NaiveTime = Utc::now().time();
    println!("Total time taken to run is {}", end_time - start_time);
}

上面的代码输出如下:
Total time taken to run is PT520.532696S

我猜如果没错的话是520秒,但是如何把它转换成分钟呢?有更好的方法吗?

2个回答

10

看一眼文档就能得到答案

use chrono::Utc;

fn main() {
    let start_time = Utc::now().time();
    let end_time = Utc::now().time();
    let diff = end_time - start_time;
    println!("Total time taken to run is {}", diff.num_minutes());
}

但请注意,这不是一种以单调方式测量时间的好方法。如果用户以某种方式更改系统日期,则此代码可能显示-5分钟。另外,调用time()会删除日期信息,而在使用计时器时,通常不希望忽略日期,因此请删除time()调用。


7

看起来被接受的答案可能存在一些潜在缺陷。

一个潜在更好的方法,建议参考 Rust Nursery

如下:

use std::time::{Duration, Instant};
use std::thread;

fn expensive_function() {
    thread::sleep(Duration::from_secs(1));
}

fn main() {
    let start = Instant::now();
    expensive_function();
    let duration = start.elapsed();

    println!("Time elapsed in expensive_function() is: {:?}", duration);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接