You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中如何将基于Unix时间戳的u32值转为std::time::SystemTime?

在Rust中将u32类型的Unix纪元时间转换为SystemTime

正向转换(u32 → SystemTime)

gzip头部的修改时间是基于Unix纪元的32位无符号整数(单位:秒),按照以下方式转换即可:

  1. 将u32值转换为Duration类型,代表从Unix纪元到目标时间的间隔时长
  2. 以SystemTime::UNIX_EPOCH为基准,加上该Duration得到目标SystemTime

示例代码:

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

fn gzip_mtime_to_system_time(mtime: u32) -> SystemTime {
    let duration = Duration::from_secs(mtime as u64);
    SystemTime::UNIX_EPOCH + duration
}

注意:u32的最大值对应2106年左右,这是gzip头部规范(RFC 1952)定义的范围,该转换完全符合规范要求。

反向转换(SystemTime → 整数类型)

若要将SystemTime::now()转为整数(如u32或u64),只需计算它与UNIX_EPOCH的时间差:

示例代码:

use std::time::SystemTime;

fn system_time_to_unix_secs() -> Result<u64, Box<dyn std::error::Error>> {
    let now = SystemTime::now();
    let duration_since_epoch = now.duration_since(SystemTime::UNIX_EPOCH)?;
    Ok(duration_since_epoch.as_secs())
}

如果需要转换为u32,建议用try_into()做安全转换,避免溢出(当时间超过2106年时,u64转u32会溢出):

// 安全转换为u32
let secs_u32: u32 = duration_since_epoch.as_secs().try_into()?;

内容的提问来源于stack exchange,提问作者JamesThomasMoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:48:22