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

使用Rust Time crate时毫秒级Unix时间戳超出最大值问题排查

问题原因及解决方法

你犯了参数类型混淆的错误:OffsetDateTime::from_unix_timestamp方法接收的是秒级Unix时间戳,而非毫秒级。你传入的1649750400034是毫秒数,这个数值远超出该方法允许的秒数范围(最大为253402300799,对应公元9999年),因此触发了范围错误。

修正后的代码

处理毫秒级时间戳需使用专门的from_unix_timestamp_millis方法,测试代码修改如下:

#[test]
fn timestamp_from_millis() { 
    let ts = OffsetDateTime::from_unix_timestamp_millis(1649750400034)
        .unwrap()
        .to_offset(offset!(-4));

    assert_eq!(ts.year(), 2022);
    assert_eq!(ts.month(), time::Month::April);
    assert_eq!(ts.day(), 12);
    assert_eq!(ts.hour(), 4);
    assert_eq!(ts.minute(), 0);
}

方法参数说明

time crate中几个时间戳转换方法的参数类型:

  • from_unix_timestamp:接收秒级时间戳(i64类型)
  • from_unix_timestamp_millis:接收毫秒级时间戳(i64类型)
  • from_unix_timestamp_nanos:接收纳秒级时间戳(i128类型)

你之前用纳秒方法正常是因为传入了正确的纳秒数,而毫秒数被错误传入秒级方法,自然会超出范围报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:45:42