📜  Golang 中的 time.Time.MarshalJSON()函数示例(1)

📅  最后修改于: 2023-12-03 15:01:01.805000             🧑  作者: Mango

Golang 中的 time.Time.MarshalJSON()函数

在 Golang 中,time.Time 是表示时间的一个重要类型。在常规的时间格式化和解析中使用得比较多,而在进行 JSON 格式化时,该类型数据同样需要进行转换。

时间类型的转换可以使用 time.Time.MarshalJSON() 和 time.Time.UnmarshalJSON() 函数,其中 MarshalJSON() 函数用于将时间类型转换为 JSON 格式,而 UnmarshalJSON() 函数是将 JSON 格式转换为 Golang 的时间类型。

使用方法

time.Time.MarshalJSON() 函数可以将时间类型转换为 JSON 字符串。以下为示例代码:

package main

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

func main() {
    t := time.Now()
    b, err := json.Marshal(t)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

输出结果如下:

"2022-05-27T22:26:33.057759+08:00"

可以看到,输出的结果为 JSON 字符串,其格式为 "YYYY-MM-DDTHH:mm:ss.ssssss+HH:MM",其中 YYYY 为代表年份的数字,MM 代表月份,DD 代表日期,HH 代表小时,mm 代表分钟,ss 代表秒数,ssssss 代表微秒数,+HH:MM 代表时区。注意,输出的时间是当前本地时间。

自定义时间格式

time.Time.MarshalJSON() 函数默认的时间格式为 RFC3339 格式,即 "YYYY-MM-DDTHH:mm:ss.sssZ"。但有时候我们需要使用自定义的时间格式,此时可以将需要的时间格式定义成 string 类型,再使用 Time.Format() 函数进行格式化输出。

以下为示例代码:

package main

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

func main() {
    t := time.Now()
    customFormat := "2006-01-02 15:04:05"
    customTime := t.Format(customFormat)
    b, err := json.Marshal(customTime)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

输出结果如下:

"2022-05-27 22:31:15"

可以看到,输出的结果是 "2006-01-02 15:04:05" 格式的时间字符串。

注意事项

当进行转换时,需要确保时间的时区信息以及日期格式正确,否则会导致转换失败。

此外,由于 JSON 字符串中有特殊字符,所以对于时间字符串的转换需要使用双引号将其包裹,即将转换后的结果使用双引号包裹。

总结

time.Time.MarshalJSON() 函数是将时间类型转换为 JSON 字符串的函数,支持默认时间格式和自定义时间格式。需要注意的是,在进行时间类型的转换时需要正确处理时区信息和日期格式,以保证转换成功。