你在学习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
结构体的 bias
和 daylightbias
字段来获取几分钟内的 utc 偏移量。
理论要掌握,实操不能落!以上关于《如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!
--结束END--
本文标题: 如果在流程执行期间更改时区,时间包中的区域方法不会返回更新的时区
本文链接: https://lsjlt.com/news/596061.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0