1 回答
TA贡献1847条经验 获得超7个赞
当您在秒的小数部分看到较少的数字时,那是因为它将以零结尾,将它们排除在外并不会改变时间值。
看起来您是通过将一些值(包含时间戳)编组到 JSON 来生成这些输出的。a 的 JSON 表示time.Time
“受”于Time.MarshalJSON()
:
时间是 RFC 3339 格式的带引号的字符串,如果存在则添加亚秒级精度。
看这个例子:
t1 := time.Date(2019, 5, 10, 11, 12, 13, 123456789, time.UTC)
fmt.Println(t1)
t2 := time.Date(2019, 5, 10, 11, 12, 13, 123456700, time.UTC)
fmt.Println(t2)
这输出:
2019-05-10 11:12:13.123456789 +0000 UTC
2019-05-10 11:12:13.1234567 +0000 UTC
将它们编组为 JSON:
data, err := json.Marshal(t1)
fmt.Println(string(data), err)
data, err = json.Marshal(t2)
fmt.Println(string(data), err)
给出输出:
"2019-05-10T11:12:13.123456789Z" <nil>
"2019-05-10T11:12:13.1234567Z" <nil>
t1 := time.Date(2019, 5, 10, 11, 12, 13, 123456789, time.UTC)
fmt.Println(t1)
t2 := time.Date(2019, 5, 10, 11, 12, 13, 123456700, time.UTC)
fmt.Println(t2)
这输出:
2019-05-10 11:12:13.123456789 +0000 UTC
2019-05-10 11:12:13.1234567 +0000 UTC
将它们编组为 JSON:
data, err := json.Marshal(t1)
fmt.Println(string(data), err)
data, err = json.Marshal(t2)
fmt.Println(string(data), err)
给出输出:
"2019-05-10T11:12:13.123456789Z" <nil>
"2019-05-10T11:12:13.1234567Z" <nil>
t1 := time.Date(2019, 5, 10, 11, 12, 13, 123456789, time.UTC)
fmt.Println(t1)
t2 := time.Date(2019, 5, 10, 11, 12, 13, 123456700, time.UTC)
fmt.Println(t2)
这输出:
2019-05-10 11:12:13.123456789 +0000 UTC
2019-05-10 11:12:13.1234567 +0000 UTC
将它们编组为 JSON:
data, err := json.Marshal(t1)
fmt.Println(string(data), err)
data, err = json.Marshal(t2)
fmt.Println(string(data), err)
给出输出:
"2019-05-10T11:12:13.123456789Z" <nil>
"2019-05-10T11:12:13.1234567Z" <nil>
如果您希望零出现在输出中,请time.Format()
在第二个分数的格式字符串中使用和在输出中使用尽可能多的数字的零。这记录在time
包中:常量:
小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。小数点后跟一个或多个九表示小数秒,打印到给定的小数位数,并删除尾随零。
Time.MarshalJSON()用途time.RFC3339Nano是:
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
所以尾随零被删除。如果您在格式中使用零而不是九:
fmt.Println(t2.Format("2006-01-02T15:04:05.000000000Z"))
这输出:
2019-05-10T11:12:13.123456700Z
尝试Go Playground上的示例。
小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。小数点后跟一个或多个九表示小数秒,打印到给定的小数位数,并删除尾随零。
Time.MarshalJSON()用途time.RFC3339Nano是:
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
所以尾随零被删除。如果您在格式中使用零而不是九:
fmt.Println(t2.Format("2006-01-02T15:04:05.000000000Z"))
这输出:
2019-05-10T11:12:13.123456700Z
尝试Go Playground上的示例。
小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。小数点后跟一个或多个九表示小数秒,打印到给定的小数位数,并删除尾随零。
Time.MarshalJSON()用途time.RFC3339Nano是:
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
所以尾随零被删除。如果您在格式中使用零而不是九:
fmt.Println(t2.Format("2006-01-02T15:04:05.000000000Z"))
这输出:
2019-05-10T11:12:13.123456700Z
尝试Go Playground上的示例。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报