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

如何在Go语言中按自定义格式获取带GMT时区的当前时间?

嘿,这个问题我熟!我来帮你搞定Go里的时间格式化时区偏移问题~

首先得说清楚你之前写法的问题:你用的"2006-01-02 15:04:05 GMT+1"模板里,GMT+1是固定字符串,Go的time.Format方法不会把它当成时区偏移的占位符来替换。Go的时间格式化逻辑是基于参考时间Mon Jan 2 15:04:05 MST 2006来匹配的——只有对应参考时间的特定占位符才会被替换成当前时间的对应部分,硬写的+1自然不会变成你所在的GMT+3。

最优实现方式

直接用Go内置的时区偏移占位符Z07就能完美解决,它会输出带符号的两位小时偏移(比如+03、-05),刚好匹配你要的GMT格式:

package main

import (
	"fmt"
	"time"
)

func main() {
	targetFormat := time.Now().Format("2006-01-02 15:04:05 GMTZ07")
	fmt.Println(targetFormat)
}

如果你在GMT+3时区,运行后会得到类似:2024-05-20 14:35:22 GMT+03,完全符合你的需求。

想要不带前导零的小时数?

如果你偏好GMT+3而不是GMT+03,可以手动提取时区偏移的小时数再拼接:

now := time.Now()
// 时区偏移以秒为单位,转换成小时
offsetHours := now.Location().Offset() / 3600
formatted := fmt.Sprintf("%s GMT+%d", now.Format("2006-01-02 15:04:05"), offsetHours)
fmt.Println(formatted)

这种写法会输出2024-05-20 14:35:22 GMT+3,适合不需要前导零的场景。

再补个小知识点

Go里的参考时间Mon Jan 2 15:04:05 MST 2006是故意选的:数字1,2,3,4,5,6对应时间的各个部分(月、日、时、分、秒、年),这样更容易记忆。以后遇到时间格式化问题,对照这个参考时间来写模板就不会错啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:17:13