为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正确的分钟在 Go 中格式化本地时间对象?

如何使用正确的分钟在 Go 中格式化本地时间对象?

Go
四季花海 2021-10-18 17:10:25
我已经用代码更新了问题,强调了为什么所谓重复的解决方案对我不起作用我正在尝试使用 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上试一试。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信