2 回答
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)
}
它的作品!
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
我不需要定义编组函数来处理格式。但是,如果您需要为您的日期和时间做一个完全自定义的格式,那么我相信您将需要定义这些函数。
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报