2026/4/17 2:42:04
网站建设
项目流程
网站改版阿里云怎么做网站301定向,网站如何做留言板,秦皇岛中兵建设集团网站,百度软文推广怎样收费这是一个 Rust 时间库中的 Duration 结构体实现#xff0c;提供高精度的时间跨度表示。
1. 主要特性
纳秒级精度#xff1a;由整秒和纳秒部分组成支持负值#xff1a;与标准库的 std::time::Duration 不同#xff0c;支持负时间间隔安全边界检查#xff1a;使用 RangedI32…这是一个 Rust 时间库中的Duration结构体实现提供高精度的时间跨度表示。1. 主要特性纳秒级精度由整秒和纳秒部分组成支持负值与标准库的std::time::Duration不同支持负时间间隔安全边界检查使用RangedI32确保纳秒值在有效范围-999,999,999 到 999,999,9992. 核心结构pubstructDuration{seconds:i64,// 整秒数nanoseconds:Nanoseconds,// 纳秒部分带范围检查padding:Padding,// 用于编译器优化niche value optimization}3. 时间单位常量提供了常用时间单位的预定义常量// 基本单位pubconstNANOSECOND:SelfSelf::nanoseconds(1);pubconstMICROSECOND:SelfSelf::microseconds(1);pubconstMILLISECOND:SelfSelf::milliseconds(1);pubconstSECOND:SelfSelf::seconds(1);pubconstMINUTE:SelfSelf::minutes(1);pubconstHOUR:SelfSelf::hours(1);pubconstDAY:SelfSelf::days(1);pubconstWEEK:SelfSelf::weeks(1);// 特殊值pubconstZERO:SelfSelf::seconds(0);pubconstMIN:SelfSelf::new_ranged(i64::MIN,Nanoseconds::MIN);pubconstMAX:SelfSelf::new_ranged(i64::MAX,Nanoseconds::MAX);4. 构造函数多种构造方式// 从秒和纳秒创建letd1Duration::new(1,500_000_000);// 1.5秒// 从时间单位创建letd2Duration::hours(2);// 2小时letd3Duration::minutes(30);// 30分钟// 从浮点数创建letd4Duration::seconds_f64(1.5);// 1.5秒letd5Duration::seconds_f32(0.5);// 0.5秒// 从小单位创建letd6Duration::milliseconds(1500);// 1500毫秒letd7Duration::microseconds(500);// 500微秒letd8Duration::nanoseconds(100);// 100纳秒5. 查询方法获取整数值letdurationDuration::hours(2)Duration::minutes(30);duration.whole_hours();// 2duration.whole_minutes();// 150duration.whole_seconds();// 9000duration.whole_days();// 0获取小数部分letdurationDuration::seconds(1)Duration::milliseconds(500);duration.as_seconds_f64();// 1.5duration.as_seconds_f32();// 1.5duration.subsec_milliseconds();// 500duration.subsec_microseconds();// 500000duration.subsec_nanoseconds();// 5000000006. 属性检查letposDuration::seconds(5);letnegDuration::seconds(-5);letzeroDuration::ZERO;pos.is_positive();// truepos.is_negative();// falsepos.is_zero();// falseneg.is_positive();// falseneg.is_negative();// trueneg.is_zero();// falsezero.is_zero();// true7. 数学运算加法letd1Duration::seconds(5);letd2Duration::seconds(3);// 普通加法可能panicletsumd1d2;// 8秒// 检查溢出的加法letcheckedd1.checked_add(d2);// Some(8秒)// 饱和加法letsaturatedDuration::MAX.saturating_add(d2);// Duration::MAX减法letd1Duration::seconds(5);letd2Duration::seconds(3);letdiffd1-d2;// 2秒letneg_diffd2-d1;// -2秒letcheckedd1.checked_sub(d2);// Some(2秒)乘除法letdDuration::seconds(10);letmultipliedd*2;// 20秒letdividedd/2;// 5秒letfloat_muld*1.5;// 15秒letfloat_divd/2.5;// 4秒取反letdDuration::seconds(5);letnegated-d;// -5秒8. 与标准库互操作usestd::time::DurationasStdDuration;// 从标准库转换letstd_durationStdDuration::from_secs(5);lettime_durationDuration::try_from(std_duration).unwrap();// 转换为标准库无符号letunsignedtime_duration.unsigned_abs();// 与标准库比较assert_eq!(Duration::seconds(5),StdDuration::from_secs(5));assert!(Duration::seconds(10)StdDuration::from_secs(5));9. 格式化显示letdurationDuration::hours(2)Duration::minutes(30);// 完整格式println!({},duration);// 2h30m0s// 简洁格式带精度println!({:.2},duration);// 2.50hprintln!({:.0},duration);// 3h10. 设计亮点范围安全性使用RangedI32保证纳秒值始终有效零成本抽象编译时检查运行时无额外开销完备的数学运算支持各种算术操作良好的错误处理提供 panic 和 Result 两种风格的 API与标准库兼容便于与现有代码集成11. 性能优化Niche Value Optimization通过Padding字段优化内存布局内联函数大多数方法标记为#[inline]常量求值尽可能在编译时计算避免分支使用位操作处理浮点数转换12. 使用场景时间间隔计算计算两个时间点之间的差值定时任务设置延迟或周期性执行性能测量测量代码执行时间时间运算进行时间加减运算序列化/反序列化作为时间数据的中间表示这个实现特别适合需要处理相对时间、倒计时、时间差计算的场景弥补了标准库Duration不支持负值的不足。