Go 在humanize.Time()包中使用Mysql的时间戳

Go 在humanize.Time()包中使用Mysql的时间戳,go,timestamp,mariadb,Go,Timestamp,Mariadb,我有一个带有时间戳字段的mariaDB数据库。我希望将该字段中的值解析为time.time()值。这可以通过将?parseTime=true添加到连接字符串中来实现。在获取一行之后,我希望将值(即time.time)用于。不幸的是,过去60分钟内的值由humanize.Time()转换为1小时后的值。当我将time.time()值直接输入到personalize.time()中时,它给了我x秒前的时间 所以我不知道我做错了什么。我想我需要将2017-04-23 14:00:16+0000 UTC

我有一个带有时间戳字段的mariaDB数据库。我希望将该字段中的值解析为
time.time()
值。这可以通过将
?parseTime=true
添加到连接字符串中来实现。在获取一行之后,我希望将值(即time.time)用于。不幸的是,过去60分钟内的值由humanize.Time()转换为
1小时后的值
。当我将time.time()值直接输入到personalize.time()中时,它给了我
x秒前的时间

所以我不知道我做错了什么。我想我需要将
2017-04-23 14:00:16+0000 UTC
转换为
2017-04-23 14:00:16.370758048+0200 CEST
,但如何转换

package main

import (
    "fmt"
    "log"
    "time"

    humanize "github.com/dustin/go-humanize"
)

// value from database: 2017-04-23 14:00:16 +0000 UTC
// typical time.Now() value: 2017-04-23 14:00:16.370758048 +0200 CEST

func main() {
    layout := "2006-01-02 15:04:05 -0700 MST"
    beforeParsing := "2017-04-23 14:00:16 +0000 UTC"

    t, err := time.Parse(layout, beforeParsing)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(t)
    fmt.Println(humanize.Time(t))
}

“不幸的是,过去60分钟内的值被humanize.Time()转换为1小时后的值”-这听起来不对:您希望得到什么结果?这听起来根本不像数据库的问题,但是humanize.Time有问题。我是不是误解了什么?如果您将测试代码限制为使用手动输入时间,而不是从db读取,会发生什么?你也有同样的行为吗?人性化的包装很好;当我在personalize.time()函数中使用time.time()时,我会收到类似“4秒前”的值。那太好了。我的问题是无法将数据库值
2017-04-23 14:00:16+0000 UTC
转换为
2017-04-23 14:00:16+0000 UTC
。因此,我认为我需要将UTC转换为CEST。我建议将您的问题集中在“我无法将数据库值
2017-04-23 14:00:16+0000 UTC
转换为2
017-04-23 14:00:16+0000 UTC
”上,并删除有关人性化的详细信息。时间您不需要手动转换它,
time.Parse
。您可以通过向示例中添加
fmt.Printf(“时差=%v\n”,Time.Now().Sub(t))
来验证结果。