You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中ISO日期格式(YYYY-MM-DD)处理问题求助

解决Go中数据库日期转为YYYY-MM-DD格式的问题

首先你之前尝试在结构体定义里直接用time.Format是不对的——结构体字段需要指定类型,而不是格式化语句。下面给你两种实用的解决方案:

方法一:用time.Time字段存储,扫描后按需格式化

这是最直观的方式,先把日期扫描为time.Time类型,之后再用Format方法转成你要的YYYY-MM-DD格式:

import "time"

type hr struct {
    USER_DATE time.Time
    USER_ID   string
}

// 执行查询与扫描逻辑
rows, err := db.Query(`SELECT "USER_DATE","USER_ID" FROM user`)
if err != nil {
    http.Error(w, http.StatusText(500), 500)
    return
}
defer rows.Close()

for rows.Next() {
    var item hr
    err := rows.Scan(&item.USER_DATE, &item.USER_ID)
    if err != nil {
        // 处理扫描错误,比如跳过当前行或返回错误
        continue
    }
    // 格式化为目标字符串格式
    formattedDate := item.USER_DATE.Format("2006-01-02")
    // 现在formattedDate就是你需要的"2018-03-21"格式
    fmt.Println(formattedDate, item.USER_ID)
}

方法二:自定义类型实现sql.Scanner接口,自动转换

如果你希望结构体字段直接存储格式化后的字符串,可以自定义一个类型并实现sql.Scanner接口,这样扫描时会自动完成转换:

import (
    "fmt"
    "time"
)

// 自定义日期字符串类型
type DateStr string

// 实现sql.Scanner接口,处理数据库值到自定义类型的转换
func (d *DateStr) Scan(value interface{}) error {
    t, ok := value.(time.Time)
    if !ok {
        return fmt.Errorf("expected time.Time type, got %T", value)
    }
    // 格式化为YYYY-MM-DD后赋值给自定义类型
    *d = DateStr(t.Format("2006-01-02"))
    return nil
}

// 重新定义结构体
type hr struct {
    USER_DATE DateStr
    USER_ID   string
}

// 查询扫描逻辑
rows, err := db.Query(`SELECT "USER_DATE","USER_ID" FROM user`)
if err != nil {
    http.Error(w, http.StatusText(500), 500)
    return
}
defer rows.Close()

for rows.Next() {
    var item hr
    err := rows.Scan(&item.USER_DATE, &item.USER_ID)
    if err != nil {
        continue
    }
    // item.USER_DATE已经是"2018-03-21"格式的字符串了
    fmt.Println(item.USER_DATE, item.USER_ID)
}

小提示

  • 确保你的数据库驱动支持将日期字段扫描为time.Time类型,主流的PostgreSQL、MySQL驱动都默认支持。
  • 你例子里的2018-03-21T00:00:00Z是标准RFC3339格式,time.Time可以直接解析,不需要额外处理。

内容的提问来源于stack exchange,提问作者sibert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:01:32