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

Go API如何格式化时间戳以严格符合指定的yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'格式?

固定输出6位纳秒的Go时间戳实现

问题描述

需要返回格式为yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'的时间戳,使用Go标准库的time.Format("2006-01-02T15:04:05.999999Z")时存在以下问题:

  • 无纳秒的时间输出会省略.000000Z,变为1990-01-24T00:10:00Z
  • 纳秒不足6位时(如120000纳秒),输出为1990-01-24T00:10:00.00012Z,缺少末尾补零

要求必须保留6位纳秒位,即使全为0也要显示完整的.000000Z。

解决方案

利用Go的fmt.Sprintf配合时间的秒级格式化与纳秒计算,直接拼接出固定格式的时间戳:

func ParseToTimestamp(duration string, systemTime time.Time) (string, error) {
    parsedDuration, err := time.ParseDuration(duration)
    if err != nil {
        return "", err
    }
    validity := systemTime.Add(parsedDuration)
    // 先格式化到秒级,再拼接6位微秒(纳秒/1000),补前导零
    return fmt.Sprintf("%s.%06dZ", validity.Format("2006-01-02T15:04:05"), validity.Nanosecond()/1000), nil
}

解释

  • validity.Format("2006-01-02T15:04:05"):获取不带纳秒的标准时间字符串
  • validity.Nanosecond()/1000:将纳秒转换为微秒(1微秒=1000纳秒),对应格式中的6位SSSSSS部分
  • %06d:格式化微秒为6位数字,不足6位时自动补前导零,确保始终输出6位

这样无论时间的纳秒部分是0、120000还是999999999,最终都会输出固定6位的小数部分,完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:25