gpt4 book ai didi

go - 防止 json.Marshal time.Time 删除尾随零

转载 作者:IT王子 更新时间:2023-10-29 01:58:02 26 4
gpt4 key购买 nike

我有类似下面的代码

package main

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

type Message struct {
Time time.Time `json:"timestamp,omitempty"`
}

func main() {
t, _ := time.Parse("2006-01-02T15:04:05.999Z07:00", "2017-05-01T15:04:05.630Z")
msg := Message{
Time: t,
}
bs, _ := json.Marshal(msg)
fmt.Println(string(bs[:]))
}

这打印

{"timestamp":"2017-05-01T15:04:05.63Z"}

如何让 json 编码保持尾随 0?即,打印这个?

{"timestamp":"2017-05-01T15:04:05.630Z"}

编辑:

这里是 Playground https://play.golang.org/p/9p3kWeiwu2

最佳答案

time.Time 始终编码为 RFC 3339,仅包括亚秒级精度(如果存在):https://golang.org/pkg/time/#Time.MarshalJSON

您可以使用命名的 time.Time 类型编写您自己的自定义版本,或者您可以为您的结构定义一个自定义编码函数,或者您可以让您的结构在那个地方保存一个字符串。在任何情况下,如果您想使用相同的格式,但包括尾随零,则需要使用 RFC3339Nano 常量的修改版本。

它的值为:"2006-01-02T15:04:05.999999999Z07:00"

末尾的 9 表示“包括直到最右边的非零值,之后省略”。如果将这些 9 更改为 0,它将始终包含它们。例如,如果你总是想要毫秒精度(之后没有任何东西,不管它是否非零),你会使用:

“2006-01-02T15:04:05.000Z07:00”

如果您在 time.Time 值上将其提供给 Format(),您将得到所需的字符串,因此可以将其包含在 JSON 中。

功能示例:https://play.golang.org/p/oqwnma6odw

关于go - 防止 json.Marshal time.Time 删除尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43741286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com