1 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
當(dāng)您在秒的小數(shù)部分看到較少的數(shù)字時,那是因為它將以零結(jié)尾,將它們排除在外并不會改變時間值。
看起來您是通過將一些值(包含時間戳)編組到 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>
如果您希望零出現(xiàn)在輸出中,請time.Format()
在第二個分?jǐn)?shù)的格式字符串中使用和在輸出中使用盡可能多的數(shù)字的零。這記錄在time
包中:常量:
小數(shù)點后跟一個或多個零表示小數(shù)秒,打印到給定的小數(shù)位數(shù)。小數(shù)點后跟一個或多個九表示小數(shù)秒,打印到給定的小數(shù)位數(shù),并刪除尾隨零。
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上的示例。
小數(shù)點后跟一個或多個零表示小數(shù)秒,打印到給定的小數(shù)位數(shù)。小數(shù)點后跟一個或多個九表示小數(shù)秒,打印到給定的小數(shù)位數(shù),并刪除尾隨零。
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上的示例。
小數(shù)點后跟一個或多個零表示小數(shù)秒,打印到給定的小數(shù)位數(shù)。小數(shù)點后跟一個或多個九表示小數(shù)秒,打印到給定的小數(shù)位數(shù),并刪除尾隨零。
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 關(guān)注
- 124 瀏覽
添加回答
舉報