std::time

std::time 只做时间戳、不做年月日。由第三方库(chrono)做

核心原因:日期太复杂,标准库不敢随便背锅

Duration

设置时间长度(间隔),通常用来延时等待、时间计算

new生成

new(秒, 纳秒)

use std::time::{SystemTime, Duration};

fn main() {
    let d = Duration::new(1, 222);

    println!("d(秒):{:?}", d);
}
d(秒):1.000000222s

快速生成间隔

使用最多from_secsfrom_millis

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

fn main() {
    let s1 = Duration::from_secs(1); // 1秒
    let s2 = Duration::from_millis(1); // 1000毫秒 = 1秒
    let s3 = Duration::from_micros(1); // 1000微秒 = 1毫秒
    let s4 = Duration::from_nanos(1); // 1000纳秒 = 1微妙

    println!("s1: {:?}", s1);
    println!("s2: {:?}", s2);
    println!("s3: {:?}", s3);
    println!("s4: {:?}", s4);
}
s1: 1s
s2: 1ms
s3: 1µs
s4: 1ns

单位转换

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

fn main() {
    let s1 = Duration::from_secs(1); // 1秒

    println!("{:?}", s1.as_secs()); // 转秒
    println!("{:?}", s1.as_millis()); // 转毫秒
    println!("{:?}", s1.as_micros()); // 转微妙
    println!("{:?}", s1.as_nanos()); // 转纳秒
}
1
1000
1000000
1000000000

加减

注意时间不能为负数

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

fn main() {
    let s1 = Duration::from_secs(1); // 1秒
    let s2 = Duration::from_millis(233);

    let s3 = s1 + s2;
    println!("s3: {:?}", s3);

    // let s4 = s2 - s1;
    // println!("{:?}", s4);

    let s4 = s1 - s2;
    println!("s4: {:?}", s4);
}
s3: 1.233s
s4: 767ms

Instant

计时专用时间点(性能计时、超时、间隔)

now

  • Instant::now():表示电脑开机到现在的秒数 + 纳秒

    • tv_sec: 秒

    • tv_nsec: 纳秒

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

fn main() {
    let s1 = Instant::now();

    println!("s1: {:?}", s1);
}
s1: Instant { tv_sec: 868612, tv_nsec: 111540916 }

计算间隔

elapsed本质是Instant::now() - self

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

fn main() {
    let s1 = Instant::now();
		
    // 睡眠2秒
    sleep(Duration::from_secs(2));
		
  	// 返回Duration
    let s2 = s1.elapsed();
    println!("s2: {:?}", s2);
}
s2: 2.0012385s

时间加减

Instant和Duration

  • Instant(时间节点) + Duration(时长) = Instant(时间节点)
  • Instant(时间节点) - Duration(时长) = Instant(时间节点)
use std::time::{Duration, Instant, SystemTime};

fn main() {
    let s1 = Instant::now();

    let s2 = s1 + Duration::from_secs(1);
    println!("s2: {:?}", s2);
}
s2: Instant { tv_sec: 867631, tv_nsec: 79020083 }

Instant和Instant

  • Instant(时间节点) - Instant(时间节点) =Duration(时长/间隔)
    • 就是elapsed
  • Instant+Instant报错
use std::time::{Duration, Instant, SystemTime};
use std::thread::sleep;

fn main() {
    let s1 = Instant::now();

    sleep(Duration::from_secs(1));

    let s2 = Instant::now();
    println!("d: {:?}", s2 - s1);
}
d: 1.005040791s

比较时间先后

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

fn main() {
    let s1 = Instant::now();

    let s2 = Instant::now();

    if s1 < s2 {
        println!("s1 is less than s2 ");
    } else {
        println!("s1 is not less than s2 ");
    }
}
s1 is less than s2 

SystemTime

日历专用时间点

now

  • SystemTime::now():表示1970-01-01 到现在的秒数 + 纳秒

    • tv_sec: 秒

    • tv_nsec: 纳秒

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

fn main() {
    let s1 = SystemTime::now();
    println!("s1: {:?}", s1);
}
s1: SystemTime { tv_sec: 1775747289, tv_nsec: 707167000 }

时差计算

SystemTime和Duration

  • SystemTime(时间节点) + Duration(间隔) =SystemTime(时间节点)
  • SystemTime - Duration =SystemTime
use std::time::{Duration, Instant, SystemTime};
use std::thread::sleep;

fn main() {
    let s1 = SystemTime::now();
		// 加10秒
    let s2 = s1 + Duration::from_secs(10);
    println!("s1: {:?}", s1);
    println!("s2: {:?}", s2);
}
s1: SystemTime { tv_sec: 1775748144, tv_nsec: 473886000 }
s2: SystemTime { tv_sec: 1775748154, tv_nsec: 473886000 }

SystemTime和SystemTime

  • SystemTime - SystemTime = Duration
  • SystemTime + SystemTime报错
use std::time::{Duration, Instant, SystemTime};
use std::thread::sleep;

fn main() {
    let s1 = SystemTime::now();

    sleep(Duration::from_secs(1));

    let s2 = SystemTime::now();

    // 相当于s2 - s1
    let s3 = s2.duration_since(s1).unwrap();
    println!("s3: {:?}", s3);
}

时间戳

SystemTime转时间戳

use std::time::SystemTime;

fn main() {
    let time = SystemTime::now();

    // 转换成从1970-01-01开始的秒数
  	// 等于SystemTime::now() - SystemTime::UNIX_EPOCH
    let ts = time.duration_since(SystemTime::UNIX_EPOCH).unwrap();
    println!("时间戳:{}", ts.as_secs());
}
时间戳:1775748200

时间戳转SystemTime

use std::time::{SystemTime, Duration};

fn main() {
    let t = "14135644000".parse().unwrap();
    let s = SystemTime::UNIX_EPOCH + Duration::from_secs(t);

    println!("时间戳(秒):{:?}", s);
}
时间戳(秒):SystemTime { tv_sec: 14135644000, tv_nsec: 0 }
posted @ 2026-04-09 23:37  lxd670  阅读(12)  评论(0)    收藏  举报