返回顶部
首页 > 资讯 > 后端开发 > GO >如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区
  • 239
分享到

如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区

2024-04-04 23:04:56 239人浏览 独家记忆
摘要

你在学习golang相关的知识吗?本文《如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论

你在学习golang相关的知识吗?本文《如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我在下面编写了一个简单的 Go 代码来获取系统时区。它工作正常并返回系统的当前时区。问题是,如果我在进程执行之间更改时区,那么它不会返回更新后的时区。它仅返回旧时区。

package main

import (
    "fmt"
    "time"
)

func main() {
    
    for i := 0; i < 10; i++ {
        t := time.Now()
        zone, offset := t.Zone()
        fmt.Println(zone, offset)
        z, _ := t.Zone()
        fmt.Println("timezone", z)
    }
}


正确答案


如果您查看 source code of the time package,您会发现本地位置在应用程序启动时设置一次,即 sync.Once(或更准确地说:获取 tz 信息时)通过第一次调用 .get()):

// localloc is separate so that initlocal can initialize
// it even if a client has changed local.
var localloc location
var localonce sync.once

func (l *location) get() *location {
    if l == nil {
        return &utcloc
    }
    if l == &localloc {
        localonce.do(initlocal)
    }
    return l
}

现在,initlocal 是平台相关的,因为不同的平台处理时区的方式不同;例如 for windows 您有:

func initLocal() {
    var i syscall.TimezoneinfORMation
    if _, err := syscall.GetTimeZoneInformation(&i); err != nil {
        localLoc.name = "UTC"
        return
    }
    initLocalFromTZI(&i)
}

从这里开始,您可以通过源代码来了解如何为您的应用程序实现此功能。例如,在 windows 上,您可以通过调用 syscall.Timezoneinformation 结构体的 biasdaylightbias 字段来获取几分钟内的 utc 偏移量。

理论要掌握,实操不能落!以上关于《如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!

您可能感兴趣的文档:

--结束END--

本文标题: 如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区

本文链接: https://lsjlt.com/news/596061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作