gpt4 book ai didi

linux - 日期转换代码在不同机器上表现不同

转载 作者:行者123 更新时间:2023-12-02 11:24:26 25 4
gpt4 key购买 nike

我有以下代码:

package main

import (
"fmt"
"time"
)

func main() {
loc := "Jan 06"
date := "2020-12-31 16:00:00 +0000 UTC"
layout := "2006-01-02 15:04:05 -0700 MST"
t, err := time.Parse(layout, date)
if err != nil {
fmt.Print("Error")
}

fmt.Println(t)
GetFormattedDate(t, loc)
}

func GetFormattedDate(date time.Time, layout string) (string, error) {

fmt.Println("\n\n====================================================")
fmt.Println("time.Now(): ", time.Now())
fmt.Println("time.Now().Location(): ", time.Now().Location())
fmt.Println("Converting: ", date)
configLocale := "Singapore"
fmt.Println("configLocale: ", configLocale)

loc, err := time.LoadLocation(configLocale)
fmt.Println("loc: ", loc)
if err != nil {
return "", err
}

date = date.In(loc)
fmt.Println("date.In(loc): ", date)
fmt.Println("layout: ", layout)
converted := fmt.Sprintf(date.Format(layout))
fmt.Println("converted fmt: ", converted)
fmt.Println("\n\n==================================================")
return fmt.Sprintf(date.Format(layout)), nil
}
当我在本地运行它时,我得到:
====================================================
time.Now(): 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
time.Now().Location(): Local
Converting: 2020-12-31 16:00:00 +0000 UTC
configLocale: Singapore
loc: Singapore
date.In(loc): 2021-01-01 00:00:00 +0800 +08 // This is the issue
layout: Jan 06
converted fmt: Jan 21


==================================================
但是当我在我的 linux box 服务器上运行相同的代码时,我得到:
time.Now(): 2020-10-24 09:04:22.256288497 +0000 UTC m=+252.011109438
time.Now().Location(): UTC
Converting: 2020-12-31 16:00:00 +0000 UTC
msg":"configLocale: Singapore
msg":"loc: Singapore
date.In(loc): 2020-12-31 16:00:00 +0000 +0000 // This is the issue
layout: Jan 06
converted fmt: Dec 20
我正在尝试做的事情:
我正在尝试转换: 2020-12-31 16:00:00 +0000 UTC进入特定于语言环境的日期,语言环境为 Singapore .我的布局是 Jan 06对于一台机器,此日期转换为 Dec 20对于另一个它转换为 Jan 21具体到深挖的时候,感觉方法 date = date.In(loc)尽管将位置设置为 Singapore,但在不同的机器上返回不同的结果并明确地传递它,这在日志中很明显。
Playground
但是在服务器命令行上:
/ # zdump Singapore 
Singapore Mon Oct 26 02:10:18 2020 +08
任何建议我如何解决这个问题?

最佳答案

它是 configLocale 的值。它必须是 IANA Time Zone 、""、"UTC"或 "本地"。 “新加坡”在列表中,但它是少数不遵循 Continent/Region 标准格式的国家之一。 .这是一种不寻常的格式,因此在服务器计算机上的查找会导致查找失败,因此默认为 UTC(不会返回错误,这可能是一个错误),并且由于新加坡提前 8 小时,您最终会提前 8 小时。如果您对 configLocale 使用“Asia/Singapore”,它将起作用。

关于linux - 日期转换代码在不同机器上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64511813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com