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_secs和from_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 }

浙公网安备 33010602011771号