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中的记录一致了

posted @ 2025-02-15 11:11  刘宏缔的架构森林  阅读(41)  评论(0)    收藏  举报