首页 > 后端开发 > Golang > 为什么我的 Go 代码总是返回 UTC 时间,尽管使用 `time.Parse` 指定了不同的时区?

为什么我的 Go 代码总是返回 UTC 时间,尽管使用 `time.Parse` 指定了不同的时区?

Barbara Streisand
发布: 2024-11-29 11:28:12
原创
880 人浏览过

Why Does My Go Code Always Return UTC Time Despite Specifying Different Time Zones Using `time.Parse`?

解析时区代码:深入研究

在之前解析时区代码的尝试中,下面的代码始终生成结果“[date] 05:00:00 0000 UTC”,无论为 parseAndPrint 选择的时区如何

// time testing with arbitrary format
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    parseAndPrint(now, "BRT")
    parseAndPrint(now, "EDT")
    parseAndPrint(now, "UTC")
}

func parseAndPrint(now time.Time, timezone string) {
    test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone))
    if err != nil {
        fmt.Println(err)
        return
    }

    test = time.Date(
        now.Year(),
        now.Month(),
        now.Day(),
        test.Hour(),
        test.Minute(),
        test.Second(),
        test.Nanosecond(),
        test.Location(),
    )

    fmt.Println(test.UTC())
}
登录后复制

此问题源于 time.Parse 解释当前位置的时间,这可能与预期的时区不匹配。

解决问题:了解时区上下文

要准确解析时区代码,正确的方法是使用 time.Location。这是一个改进的实现:

func parseAndPrint(now time.Time, timezone string) {
    location, err := time.LoadLocation(timezone)
    if err != nil {
        fmt.Println(err)
        return
    }

    test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(test.UTC())
}
登录后复制

在此更新的代码中:

  • time.LoadLocation(timezone) 加载指定的时区位置。
  • time.ParseInLocation( “15:04:05 MST”、“05:00:00”、位置)解析时间指定时区位置的“05:00:00”。这会产生预期时区的正确时间。

以上是为什么我的 Go 代码总是返回 UTC 时间,尽管使用 `time.Parse` 指定了不同的时区?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板