我已经用代码更新了问题,强调了为什么所谓重复的解决方案对我不起作用我正在尝试使用 UTC (+0000) 时间并将它们格式化为本地时间(在我的情况下是东部时间),而不对任何时区偏移进行硬编码(以避免实施 dst 校正)。我有以下代码演示了我遇到的问题package mainimport ( "fmt" "time")func main() { // Here I load the timezone timezone, _ := time.LoadLocation("America/New_York") // I parse the time t, _ := time.Parse("Mon Jan 2 15:04:05 +0000 2006", "Tue Jul 07 10:38:18 +0000 2015") // This looks correct, it's still a utc time fmt.Println(t) // 2015-07-07 10:38:18 +0000 UTC // This seems to be fine - -4 hours to convert to est t = t.In(timezone) fmt.Println(t) // 2015-07-07 06:38:18 -0400 EDT // This prints 6:07am, completely incorrect as it should be 6:38am fmt.Println(t.Format("Monday Jan 2, 3:01pm")) // Tuesday Jul 7, 6:07am}( https://play.golang.org/p/e57slFhWFk )所以对我来说,它似乎可以很好地解析和转换时区,但是当我使用格式输出它时,它会去掉分钟并使用 07。我将分钟设置为什么并不重要,它总是以 07 的形式出现。
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
您的布局(格式)字符串不正确。正如time包的文档中所述,布局字符串必须表示这个时间:
Mon Jan 2 15:04:05 MST 2006
解析时,使用以下格式字符串:
t, _ := time.Parse("Mon Jan 02 15:04:05 -0700 2006", "Tue Jul 07 10:38:18 +0000 2015")
打印时,使用此格式字符串:
fmt.Println(t.Format("Monday Jan 2, 3:04pm"))
这将导致您的预期输出:
Tuesday Jul 7, 6:38am
在Go Playground上试一试。
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消