张成岗(CZ)的博客世界分享 http://blog.sciencenet.cn/u/zcgweb 脑损伤与脑保护;神经认知;生物信息;蛋白质组;辐射损伤与防护

博文

[转载]golang time格式化:这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5

已有 1747 次阅读 2021-1-7 22:33 |系统分类:科研笔记|文章来源:转载

https://studygolang.com/articles/22250 


golang time 格式化 format

timehorse · 2019-07-28 13:32:41 · 10808 次点击 · 预计阅读时间 1 分钟 · 2分钟之前 开始浏览    

这是一个创建于 2019-07-28 13:32:41 的文章,其中的信息可能已经有所发展或是发生改变。


名词

  • 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)
}


1 回复  |  直到 2020-10-26 18:59:13

MiracleWong

MiracleWong · #1 · 2月之前

t.Format("2006-01-02 15:04:05") 真是够奇葩的,以为随便什么都可以的




https://blog.sciencenet.cn/blog-40692-1266179.html

上一篇:[转载]招生简章:北京中医药大学 2021年“申请-审核制”博士研究生招生简章
下一篇:[转载]国家自然科学基金委员会——交叉科学三处:基于理学、工学、医学等领域的交叉科学研究
收藏 IP: 123.114.172.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 23:03

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部