为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕侠2389804 2022-07-11 14:52:44
我在 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"`}
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

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 type

func (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)

}


它的作品!


查看完整回答
反对 回复 2022-07-11
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

我遇到了同样的问题,发现如果您正在寻找特定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我不需要定义编组函数来处理格式。但是,如果您需要为您的日期和时间做一个完全自定义的格式,那么我相信您将需要定义这些函数。


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信