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

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

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

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

  

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 中直接可以定义成以下格式

1
2
3
4
5
6
7
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)

  

 

posted @   闲云-野鹤  阅读(4039)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2017-12-11 linux 更改用户的默认shell
2015-12-11 $_FILES数组为空的原因
点击右上角即可分享
微信分享提示