当前位置: 首页 > news >正文

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));// 返回Durationlet 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 - s1let 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_EPOCHlet 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 }
http://www.jsqmd.com/news/615301/

相关文章:

  • mysql如何在本地开发环境模拟生产环境_利用Docker克隆
  • 20个核心AI概念拆解:小白也能轻松入门大模型,收藏这份学习秘籍!
  • vue el-table 切换页面、组件销毁会内存泄漏吗?99% 的人都误解了
  • claude (二) skill
  • AI Agent Harness Engineering 如何改变咨询行业并重新定价知识
  • 详细解析Spring如何解决循环依赖问题事
  • 将盾CDN:云原生环境的安全防护策略
  • gopher-os硬件检测系统:从Multiboot到ACPI的完整硬件抽象层设计
  • 营销自动化数据驱动 - 多源数据 OLAP 架构演进厝
  • OCAD应用:打入式断续变焦光学系统初始结构设计
  • 视频分析神器video-analyzer:5分钟学会AI智能视频内容理解终极指南
  • 2026.4.9
  • OpenClaw多模态扩展:Qwen3-14B镜像对接OCR截图识别
  • 支付密钥硬编码、调试模式未关闭、日志泄露token——PHP生产环境支付接口的3大“自杀式配置”
  • Source Han Serif CN 开源字体:技术特性与多场景适配指南
  • 3大技术突破重新定义多模态交互:AudioCLIP的跨模态语义对齐解决方案
  • LANs.py源码深度剖析:理解多线程异步数据包处理机制
  • 探索iOS应用的奥秘:《iOS应用逆向与安全》随书源码
  • 低代码表单不再“低效”:PHP 8.3 JIT+FFI驱动的原生表单渲染引擎首曝(Beta版配额仅剩83个)
  • openwrt中自定义配置文件解析
  • 某手热门短剧逆向AI直接秒
  • 问题拆解:绩效管理系统的ROI到底怎么算?
  • 从BIO,NIO到多路复用IO——认识Netty框架
  • 【国家级数字农场认证标准】:PHP可视化配置合规性检查清单(含GDPR+农业农村部2024新规适配)
  • OctoPi性能优化:7个技巧提升打印质量和速度
  • Browser.html开发环境配置:Node.js、Servo和Electron客户端详解
  • 从零开始手搓一个STM32与机智云的小项目——GPIO的输入输出
  • DeepTutor学习社区:与其他学习者交流经验的终极指南
  • Blazor WebAssembly性能突破:实测冷启动<80ms、首屏加载<300ms的7项高级优化技法(含源码级Hook方案)
  • ESPS USB MSC 调试全过程记录栽