首页 >后端开发 >Golang >如何在Golang中解析MySQL时间数据?

如何在Golang中解析MySQL时间数据?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-21 05:29:141033浏览

How to Parse MySQL Time Data in Golang?

Golang 中的 MySQL 时间解析

在 Golang 中,从 MySQL 获取时间数据可能会带来挑战,如错误“不支持的驱动程序”所示-> 使用以下代码片段时扫描对:[]uint8 -> *time.Time":

var my_time time.Time
rows, err := db.Query("SELECT current_time FROM table")
err := rows.Scan(&my_time)

要解决此问题,请考虑使用 go-sql-driver/mysql 驱动程序,它提供了自动将 DATE 和 DATETIME 数据类型转换为 time.Time 的选项。这可以通过在连接字符串中添加 parseTime=true 来实现,如下所示:

db, err := sql.Open("mysql", "root:@/?parseTime=true")

但是,如果您特别需要 current_time (而不是 current_timestamp),则需要手动解析时间数据。以下是实现此目的的两种方法:

自定义时间解析类型

创建自定义类型 rawTime,它封装 []byte 切片并提供 Time()时间解析方法:

type rawTime []byte

func (t rawTime) Time() (time.Time, error) {
    return time.Parse("15:04:05", string(t))
}

在扫码中使用rawTime自动解析current_time:

var myTime rawTime
rows, err := db.Query("SELECT current_time()")
if rows.Next() {
    if err = rows.Scan(&myTime); err != nil {
        panic(err)
    }
}
fmt.Println(myTime.Time())

手动时间解析

您可以手动解析时间数据,而不是依赖自定义类型:

var myTime string
rows, err := db.Query("SELECT current_time()")
if rows.Next() {
    if err = rows.Scan(&myTime); err != nil {
        panic(err)
    }
}
parsedTime, err := time.Parse("15:04:05", myTime)
if err != nil {
    panic(err)
}
fmt.Println(parsedTime)

以上是如何在Golang中解析MySQL时间数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn