zoukankan      html  css  js  c++  java
  • golang结构体json格式化的时间格式

    golang结构体json格式化的时间格式

    在我们开发中,经常会解析time.Time 往往前台传过来的时候,是个string 但是我们希望在结构体转成time.Time

     type Param struct {
       Start time.Time `json:"start"`
       End   time.Time `json:"end"`
     }
    

      

    如果直接使用json.UnmarshalJSON会失败。我们需要重写UnmarshalJSONMarshalJSON方法

     const (
       timeFormat = "2006-01-02 15:04:05"
     )
     type Time time.Time
     func (t *Time) UnmarshalJSON(data []byte) (err error) {
       now, err := time.ParseInLocation(`"`+timeFormat+`"`, string(data), time.Local)
       *t = Time(now)
       return
     }
     ​
     func (t *Time) MarshalJSON() ([]byte, error) {
       b := make([]byte, 0, len(timeFormat)+2)
       b = append(b, '"')
       b = time.Time(*t).AppendFormat(b, timeFormat)
       b = append(b, '"')
       return b, nil
     }
     func (t Time) String() string {
       return time.Time(t).Format(timeFormat)
     }
     func main() {
       p := &Param{}
       str := `{"start":"2019-12-10 18:12:49","end":"2019-12-10 18:12:49"}`
       err := json.Unmarshal([]byte(str), p)
       if err != nil {
         log.Fatal(err)
       }
       log.Println(p, str)
     }
    

      

     

    如果在gin 中直接可以定义成以下格式

     type Param struct {
       BeginTime int64  `json:"begin_time" form:"begin_time" binding:"required"`
       EndTime   int64  `json:"end_time"form:"end_time" binding:"required" `
     }
     var p = &Param{}
     ctx.ShouldBindJSON(p)
     ctx.ShouldBindQuery(p)
    

      

     

  • 相关阅读:
    Less:优雅的写CSS代码
    线程池(ThreadPool)
    TiDB
    Docker实现CentOS容器SSH远程登录
    Oracle-Hints详解
    Oracle sql执行计划解析
    引擎基本服务接口API介绍
    ssh远程连接docker中linux(ubuntu/centos)
    自制操作系统
    kafka-net
  • 原文地址:https://www.cnblogs.com/tl542475736/p/12020822.html
Copyright © 2011-2022 走看看