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

时间:2015-07-07 20:46:44

标签: time go

编辑:我已使用代码更新了问题,该代码突出了所谓的重复解决方案无法为我工作的原因

我正在尝试接受UTC(+0000)次并将它们格式化为本地时间(在我的情况下为东部时间)而不对任何时区偏移进行硬编码(以避免实施dst校正)。

我有以下代码来说明我遇到的问题

package main

import (
    "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 个答案:

答案 0 :(得分:1)

您的布局(格式)字符串不正确。正如TextExtJs包的文档中所述,布局字符串必须表示此时间:

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

time 上试试。