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

如何在Go语言中获取带毫秒精度的RFC 3339格式UTC时间字符串

Go语言获取带毫秒精度的UTC时间RFC3339格式字符串

问题分析

  • 得到固定时间2009-11-10T23:00:00Z是因为用了Go的默认零值时间(time.Time{}),而非当前系统时间。
  • 虽然用了Round(time.Millisecond)和time.RFC3339Nano,但如果时间本身没有毫秒级精度(比如零值时间),自然不会输出毫秒部分。

正确实现方法

要获取当前UTC时间并输出带毫秒的RFC3339格式,需要两步:

  1. 获取当前UTC时间:time.Now().UTC()
  2. 先按毫秒精度取整,再用time.RFC3339Nano格式化,最后截断多余的纳秒位(因为RFC3339Nano会输出9位纳秒,我们只需要3位毫秒)

完整代码示例

package main

import (
	"fmt"
	"time"
)

func main() {
	// 获取当前UTC时间,按毫秒取整
	now := time.Now().UTC().Round(time.Millisecond)
	// 用RFC3339Nano格式化后,截取前23位(日期时间+3位毫秒)加Z
	timestamp := now.Format(time.RFC3339Nano)[:23] + "Z"
	fmt.Printf("\"timestamp\": \"%s\"\n", timestamp)
}

代码说明

  • time.Now().UTC():获取当前系统时间的UTC时区版本,而非零值时间。
  • Round(time.Millisecond):将时间精度截断到毫秒,避免纳秒部分干扰。
  • 格式化后截取前23位是因为time.RFC3339Nano的格式是2006-01-02T15:04:05.999999999Z07:00,取前23位刚好到毫秒位,再加上Z就符合你要的2023-10-18T20:43:20.542Z格式。

失败原因说明

你之前的代码里使用的是time.Time{}(零值时间),它的时间值固定为2009-11-10T23:00:00Z,没有毫秒部分,所以即使调用Round和Format也不会生成毫秒位。只要替换成time.Now().UTC()就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:18:19