Rust中如何将u64类型Unix时间戳转为Chrono的DateTime<Utc>类型
Rust 中u64类型Unix时间戳转Chrono DateTime实现方法
直接使用Chrono内置的时间戳构造方法即可,补全后的完整代码如下:
let timestamp_u64 = 1657113606; let date_time = chrono::DateTime::from_timestamp(timestamp_u64 as i64, 0) .expect("常规业务范围内的Unix时间戳不会超出合法取值范围");
注意事项
- 上述写法适用于Chrono 0.4.20及以上的稳定版本,方法第一个参数接收
i64类型的Unix秒级时间戳,第二个参数接收u32类型的纳秒偏移量,秒级时间戳场景下纳秒偏移直接传0即可。 - 如果你使用的是0.4.20之前的旧版本Chrono,可以替换为旧API写法:
let date_time = chrono::Utc.timestamp(timestamp_u64 as i64, 0);
- 不要直接把毫秒/微秒/纳秒级的时间戳强转后传入,需要先做单位拆分:比如毫秒级时间戳要先除以1000得到秒数,剩余的毫秒值乘以1_000_000得到纳秒值再传入,否则会得到错误的时间结果。
- 由于u64的正数取值范围大于i64,若传入的时间戳数值超过
i64::MAX(对应公元292277026596年的时间点,常规业务场景完全不会触及),转换会返回None,可根据自身业务场景做对应错误处理。
内容的提问来源于stack exchange,提问作者alextes
相关产品推荐
相关产品推荐

