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

将毫秒级Unix时间戳转换为PrimitiveDateTime遇类型不匹配问题求助

问题:毫秒级Unix时间戳转PrimitiveDateTime时类型不匹配

需要将HTTP请求传入的毫秒级Unix时间戳转换为PrimitiveDateTime类型(PostgreSQL数据库存储要求),但当前代码因跨库类型不兼容报错。

当前尝试代码

use ::time::{PrimitiveDateTime, OffsetDateTime};
use std::time::{UNIX_EPOCH, Duration};
use chrono::{DateTime, Utc, NaiveDateTime};

fn my_func() {
    let timestamp:u64 = 1696443084; // 来自HTTP请求的毫秒级时间戳(注:此处值少三位,应为1696443084000)
    let d:SystemTime = UNIX_EPOCH + Duration::from_secs(timestamp/1000);
    let datetime:DateTime<Utc> = DateTime::<Utc>::from(d); 
    let created_at:PrimitiveDateTime = PrimitiveDateTime::new(datetime.date_naive(), datetime.time());
}

编译错误信息

106 | ... = PrimitiveDateTime::new(datetime.date_naive(), datetime.time(...
    |       ^^^^^^^^^^^^^^^^^^^^^^ ---------------------  --------------- expected `Time`, found `NaiveTime`
    |                              |
    |                              expected `Date`, found `NaiveDate`
    |
note: associated function defined here
   --> /.../time-0.3.23/src/primitive_date_time.rs:92:18
    |
92  |     pub const fn new(date: ...
    |                  ^^^

解决方案

问题根源是混用了chrono和time两个库的日期时间类型,二者无法直接兼容。直接使用time库即可完成转换,无需依赖chrono:

use time::{PrimitiveDateTime, OffsetDateTime};
use std::time::{UNIX_EPOCH, Duration, SystemTime};

fn my_func() {
    // 来自HTTP请求的毫秒级Unix时间戳(补全三位毫秒)
    let timestamp: u64 = 1696443084000;
    // 从毫秒时间戳生成SystemTime
    let system_time = UNIX_EPOCH + Duration::from_millis(timestamp);
    // 转换为UTC时区的OffsetDateTime
    let offset_datetime = OffsetDateTime::from(system_time);
    // 提取PrimitiveDateTime(匹配PostgreSQL存储的无时区时间戳类型)
    let created_at: PrimitiveDateTime = offset_datetime.primitive_date_time();
}

说明

  1. 用Duration::from_millis直接处理毫秒级时间戳,无需手动除以1000,避免精度丢失
  2. 全程使用time库自身的类型转换链,彻底规避跨库类型不兼容问题
  3. Unix时间戳默认基于UTC时区,转换时使用UTC作为基准符合标准定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:25:06