在这里去新手。
我有一个日期字符串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 的参考时间即可。
这是工作变体:
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.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)
}
在操场上跑步
如果您愿意,还可以让数据库驱动程序通过将时间扫描为time.Time
变量来为您转换时间。
例如:
var tm time.Time
if err = row.Scan(&tm); err != nil {
panic(err)
}
fmt.Print(tm)
正如@mkopriva所描述的,布局应该匹配。了解2006-01-02T15:04:05Z
的布局,浏览 Golang 规范layout
用于将字符串转换为日期
Parse 解析格式化字符串并返回它的时间值 代表。布局通过显示引用方式来定义格式 时间,定义为
Mon Jan 2 15:04:05 -0700 MST 2006
然后根据您的要求使用返回的时间值Format
日期。
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"))
}
在Go Playground上检查它