golang: 得到buildinfo中vcs.time时区不正确
一,问题:
1, 看git的log
$ git log
commit c3b2a014a8c7ba3bceab73b853324e84bb84e016 (HEAD -> master)
Author: liuhongdi <37@qq.com>
Date: Thu Feb 13 13:30:22 2025 +0800
初始化
时间是正确的
但go代码中的信息错误:
kv.Key: vcs.time
buildTime: 2025-02-13 05:30:22 +0000 UTC
什么是UTC时间?
GMT(Greenwich Mean Time),格林威治平时。
GMT 根据地球的自转和公转来计算时间,它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。
GMT 是前世界标准时。
UTC(Coordinated Universal Time),协调世界时。UTC 比 GMT 更精准,它根据原子钟来计算时间。
在不需要精确到秒的情况下,可以认为 UTC=GMT。UTC 是现世界标准时。
二,解决:
代码:
func GetVcs() map[string]string {
vcs := map[string]string{
"revision": "",
"time": "",
"modified": "",
}
bi, ok := debug.ReadBuildInfo()
if !ok {
fmt.Println("Build info not available")
return vcs
} else {
//return bi.
fmt.Println(bi.Settings)
fmt.Println("开始从settings中获取数据:")
for _, kv := range bi.Settings {
fmt.Println("kv.Key:",kv.Key)
switch kv.Key {
case "vcs.revision":
Revision := kv.Value
fmt.Println("Revision:", Revision)
vcs["revision"] = Revision
case "vcs.time":
fmt.Println("time local:",time.Local)
fmt.Println("time value:",kv.Value)
buildTime, _ := time.ParseInLocation(time.RFC3339, kv.Value,time.Local)
fmt.Println("buildTime:", buildTime)
timeLocal := buildTime.In(time.Local)
fmt.Println("timeLocal:", timeLocal)
vcs["time"] = timeLocal.Format("2006-01-02 15:04:05")
case "vcs.modified":
DirtyBuild := kv.Value == "true"
fmt.Println("DirtyBuild:", DirtyBuild)
vcs["modified"] = fmt.Sprintf("%t", DirtyBuild)
}
}
return vcs
}
}
三,效果:
time local: Local
time value: 2025-02-13T05:30:22Z
buildTime: 2025-02-13 05:30:22 +0000 UTC
timeLocal: 2025-02-13 13:30:22 +0800 CST
time value: 是golang的buildInfo信息中vcs.time的值,是一个字符串
buildTime: 我们得到的UTC时间
timeLocal: 用In函数处理后得到的本地时间,
这样和git log中的记录一致了
浙公网安备 33010602011771号