我是golang开发人员,我正在尝试将UTC时间转换为本地时间但我的代码无效。这是我的代码
utc := time.Now().UTC()
local := utc
location, err := time.LoadLocation("Asia/Delhi")
if err == nil {
local = local.In(location)
}
log.Println("UTC", utc.Format("15:04"), local.Location(), local.Format("15:04"))
答案 0 :(得分:4)
您应该重写代码以在错误发生时处理错误。默认执行路径应该没有错误。因此,在time.LoadLocation
之后检查是否存在错误:
utc := time.Now().UTC()
local := utc
location, err := time.LoadLocation("Asia/Delhi")
if err != nil {
// execution would stop, you could also print the error and continue with default values
log.Fatal(err)
}
local = local.In(location)
log.Println("UTC", utc.Format("15:04"), local.Location(), local.Format("15:04"))
现在你会得到类似这样的错误消息:
cannot find Asia/Delhi in zip file /usr/local/go/lib/time/zoneinfo.zip
panic: time: missing Location in call to Time.In
您必须找到适合您所在位置的时间zome,因为其他人说检查维基百科Storing sensitive data securely in a database
答案 1 :(得分:3)
你在第3行遇到错误,你只是看不到它,因为它避免了if
阻止,因此永远不会更新第5行的local
变量。
失败的原因是因为“亚洲/德里”不是有效的奥尔森格式。
添加else
块并打印出err.Error()
值
有关有效格式的列表,请参阅以下链接:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
答案 2 :(得分:0)
这只是根据您指定的布局将UTC时间字符串转换为本地时间字符串。
func UTCTimeStr2LocalTimeStr(ts, layout string) (string, error) {
timeObject, err := time.Parse(time.RFC3339, ts)
if err != nil {
return "", err
}
return time.Unix(timeObject.Unix(), 0).Format(layout), nil
}