是否可以更改 gin-gionic 中的默认绑定时间戳格式?

我在 Go 中有一个问题,尤其是 gin-gionic 和 gorm。


假设我有这样的模型


// Classroom struct.

type Classroom struct {

    gorm.Model

    Name      string    `json:"name"`

    Code      string    `json:"code"`

    StartedAt time.Time `json:"started_at"`

}

我想Classroom用这个 JSON 创建模型数据


{

  "name": "Math",

  "code": "math-mr-robie",

  "started_at": "2020-10-10 10:00:00"

}

但是当我绑定 JSON 数据时,出现以下错误


parsing time ""2020-10-10 10:00:00"" as ""2006-01-02T15:04:05Z07:00"": cannot parse " 10:00:00"" as "T"

我知道出现错误是因为我发送的格式不是time.Time?


是否可以设置默认格式time.Time?


怎么做?


因为我尝试在之后添加 .Formattime.Time但发生错误。


// Classroom struct.

type Classroom struct {

    gorm.Model

    Name         string `json:"name"`

    Code         string `json:"code"`

    StartedAt    time.Time.Format("2006-01-02 15:04:05") `json:"started_at"`

}


慕侠2389804
浏览 92回答 2
2回答

www说

JSONData我通过创建包含时间的新结构来解决这个问题。// JSONData struct.type JSONData struct {  Time time.Time}在我在 Gorm 中自定义数据类型并在此处查看一些示例之后,我添加了一些方法// Scan JSONDate.func (j *JSONDate) Scan(value interface{}) (err error) {    nullTime := &sql.NullTime{}    err = nullTime.Scan(value)    *j = JSONDate{nullTime.Time}    return}// Value JSONDate.func (j JSONDate) Value() (driver.Value, error) {    y, m, d := time.Time(j.Time).Date()    return time.Date(y, m, d, 0, 0, 0, 0, time.Time(j.Time).Location()), nil}// GormDataType gorm common data typefunc (j JSONDate) GormDataType() string {    return "timestamp"}对于杜松子酒的东西。另一个资源@Eklavya。所以我添加了另一种方法。// UnmarshalJSON JSONDate.func (j *JSONDate) UnmarshalJSON(b []byte) error {    s := strings.Trim(string(b), "\"")    t, err := time.Parse(helpers.YMDHIS, s)    if err != nil {        return err    }    *j = JSONDate{        Time: t,    }    return nil}// MarshalJSON JSONDate.func (j JSONDate) MarshalJSON() ([]byte, error) {    return []byte("\"" + j.Time.Format(helpers.YMDHIS) + "\""), nil}// Format method.func (j JSONDate) Format(s string) string {    t := time.Time(j.Time)    return t.Format(helpers.YMDHIS)}它的作品!

紫衣仙女

我遇到了同样的问题,发现如果您正在寻找特定time格式,例如ISOString从浏览器发送的 s ,您可以得到这样的东西;type Classroom struct {     gorm.Model     Name      string    `json:"name"`     Code      string    `json:"code"`     StartedAt time.Time `json:"started_at" time_format:"RFC3339"`}有了time_format我不需要定义编组函数来处理格式。但是,如果您需要为您的日期和时间做一个完全自定义的格式,那么我相信您将需要定义这些函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go