golang time 格式化 format

timehorse · · 19949 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

名词

  • MarshalJSON 序列化:意思是将某种结构转化为字符串格式
  • UnmarshalJSON 反序列化:意思是将字符串形式转化为某种结构形式

golang的时间格式 默认采用的是RFC3339,与我们常认知的格式不同,故需要转化,但是这个转化目前也有点麻烦,一种方法是重写两个接口(marshaljson跟unmarshaljson)方法。如下:

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type JSONTime struct {
    time.Time
}

func (t *JSONTime) MarshalJSON() ([]byte, error) {
// 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5
    return []byte(fmt.Sprintf(`"%s"`, t.Format("2006-01-02 15:04:05"))), nil
}

func (t *JSONTime) UnmarshalJSON(data []byte) error {
    var err error

    t.Time, err = time.Parse(`"2006-01-02 15:04:05"`, string(data))
    if err != nil {
        return err
    }

    return nil
}

type Time struct {
    T JSONTime `json:"t,omitempty"`
}

func main() {
    t := &Time{
        T: JSONTime{time.Now()},
    }

    tBytes, _ := json.Marshal(t)
    fmt.Println(string(tBytes))

    t = &Time{}

    _ = json.Unmarshal(tBytes, t)

    fmt.Println(t.T)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:timehorse

查看原文:golang time 格式化 format

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

19949 次点击  
加入收藏 微博
1 回复  |  直到 2020-10-26 18:59:13
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传