【发布时间】:2021-01-12 18:01:00
【问题描述】:
我使用的服务要求时间输入的格式必须始终包含小数位,即使时间本身正好在第二个标记上。
例如:ValueError: time data '2021-01-07T21:09:59Z' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
我知道默认情况下,json.Marshal 会将time.Time 类型格式化为 RFC3339 格式,所以我尝试为我的结构实现自定义 Marshaler,它首先将时间转换为 RFC3339Nano ("2006-01-02T15:04:05.999999999Z07:00":
func (f *MyStruct) MarshalJSON() ([]byte, error) {
type Alias MyStruct
return json.Marshal(&struct {
*Alias
Timestring string `json:"time"`
}{
Alias: (*Alias)(f),
Timestring: f.Time.Format(time.RFC3339Nano),
})
}
但是,我发现 RFC3339Nano 仍然会省略亚秒,如果时间本身正好在第二个标记上。
如果缺少.000,我可以简单地操作字符串以添加它,但我想知道是否有更简洁的方法来实现这一点?
【问题讨论】: