Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 解析UTC日期字符串并转换为不同格式_Date_Go - Fatal编程技术网

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

Date 解析UTC日期字符串并转换为不同格式,date,go,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) 但我认为问题在于我没有正

到这里来

我有一个日期字符串
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”)

如@mkopriva所述,布局应匹配。了解布局,即
2006-01-02T15:04:05Z
,查看
layout
用于将字符串转换为日期

Parse解析格式化的字符串并返回它的时间值 代表。布局通过显示引用的方式定义格式 时间,定义为

然后使用返回的时间值根据您的要求格式化日期

package main

import (
    "fmt"
    "time"
)

func main() {
    layout1 := "2006-01-02T15:04:05Z"
    t, err := time.Parse(layout1, "2018-06-07T16:16:57Z")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(t.Format("01/02/2006 15:04"))
}
检查一下你有两个问题

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

接下来,传递给的字符串是一个格式字符串,它应该描述数据库中时间字符串的格式。您已经知道格式是什么:
2018-06-07T16:16:57Z
,因此只需使用该格式将值替换为

以下是工作变量:

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)
}


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

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

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)
}


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

例如:

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

如果日期字符串没有空格,请确保格式字符串也没有空格。类似于
time.Parse(“2006-01-02T15:04:05Z”,time)
的内容可能是?您没有检查从
time.Parse返回的错误。如果您这样做了,您会发现它的两个参数的格式必须匹配。此
“2006-01-02 15:04:05-0700 UTC”
的格式与
“2018-06-07T16:16:57Z”
不匹配。
var tm time.Time
if err = row.Scan(&tm); err != nil {
    panic(err)
}
fmt.Print(tm)