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

使用Prometheus Go远程写入器时时间戳字符过长致日期异常

解决Prometheus远程写入器时间戳转换异常的问题

哈哈,这个坑我之前踩过!问题出在时间戳的单位上:Prometheus远程写入协议里的样本时间戳Timestamp字段是毫秒级的(也就是自1970-01-01以来的毫秒数),而你直接把它传给日期转换工具时,工具默认把它当成了秒级时间戳,相当于把时间放大了1000倍,年份自然就跑到五万多年后了。

给你两个简单的解决办法:

  • 方法一:拆分秒和纳秒(兼容所有Go版本)
    把毫秒时间戳拆成秒数和纳秒数,传给Go标准库的time.Unix()方法:

    // 从毫秒时间戳中提取秒和纳秒
    sec := s.Timestamp / 1000
    nsec := (s.Timestamp % 1000) * 1000000 // 1毫秒 = 1e6纳秒
    // 转换为时间对象
    t := time.Unix(sec, nsec)
    // 按需要格式化输出
    fmt.Printf(" %f %s\n", s.Value, t.Format("2006-01-02 15:04:05"))
    
  • 方法二:用专门的毫秒转换方法(Go 1.17+推荐)
    Go 1.17及以后版本新增了time.UnixMilli()方法,直接支持毫秒级时间戳转换,代码更简洁:

    t := time.UnixMilli(s.Timestamp)
    fmt.Printf(" %f %s\n", s.Value, t.Format("2006-01-02 15:04:05"))
    

你之前手动去掉末尾三位得到的1526415583其实就是把毫秒转成了秒级时间戳,所以转换后日期正常,上面的代码就是把这个手动操作自动化啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:05:07