date - 解析 UTC 日期字符串并转换为不同的格式

标签 date go

这里是新人。

我有一个日期字符串 2018-06-07T16:16:57Z,我想将它转换成类似这样的 mm/dd/yyyy hh:mm

这似乎是一个常见问题,但我似乎找不到任何对我有用的以前的问题。

我正在读取时间字段并尝试像这样转换

time := row["Date & Time"]
fmt.Println(time)
t, _ := time.Parse("2006-01-02 15:04:05 -0700 UTC", time)
fmt.Println(t)

但我认为问题在于我没有正确的格式字符串。我尝试了一些资源但没有成功。

当我按原样打印 t 时,结果是 0001-01-01 00:00:00 +0000 UTC,这显然是不正确的。

我想做的是像这样转换我正在阅读的时间

newTime := currentDate.Format("01/02/2006 hh:mm")

最佳答案

你有两个问题。

首先,您不应该将变量命名为 time,因为这是内置包的名称。我想您知道这一点,而这只是一个复制粘贴错误。

接下来,传递给 time.Parse() 的字符串是一个格式字符串,应该描述数据库中时间字符串的格式。您已经知道格式是什么:2018-06-07T16:16:57Z,因此只需将其替换为 Go's reference time 即可.

这是工作变体:

package main

import (
    "fmt"
    "time"
)

func main() {
    tm := "2018-06-07T16:16:57Z"
    fmt.Println(tm)
    t, err := time.Parse("2006-01-02T15:04:05Z", tm)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

Run in playground


此外,数据库使用的时间格式通常被描述为 RFC3339,在 Go 中也可以作为 time.RFC3339 常量使用。

因此使用它可以进一步简化您的代码:

package main

import (
    "fmt"
    "time"
)

func main() {
    tm := "2018-06-07T16:16:57Z"
    fmt.Println(tm)
    t, err := time.Parse(time.RFC3339, tm)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

Run in playground


如果您愿意,您还可以让数据库驱动程序通过将时间扫描为 time.Time 变量来为您转换时间。

例如:

var tm time.Time
if err = row.Scan(&tm); err != nil {
    panic(err)
}
fmt.Print(tm)

关于date - 解析 UTC 日期字符串并转换为不同的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50747571/

相关文章:

javascript 将分钟添加到 new Date();在使用对象之前

c# - Linq 日期区分为字符串 yyyy-mm-dd

go - Go 中允许省略可选的第二个返回值的案例列表

go - 在go中增加结构变量

mongodb - 谷歌应用引擎 : One To Many relations in Go

javascript - 如何使用javascript从新日期动态获取最近三个月的开始日期

java - HQL 按日期查询(Java+NetBeans)

date - Grails Date变量将不会设置时间

GoLang 约定 - 从 slice 创建自定义类型

go - go 工具存储在哪里?