📅  最后修改于: 2023-12-03 15:01:01.805000             🧑  作者: Mango
在 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 字符串的函数,支持默认时间格式和自定义时间格式。需要注意的是,在进行时间类型的转换时需要正确处理时区信息和日期格式,以保证转换成功。