1 回答
TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個贊
使用time包
如果持續(xù)時間少于一天,您可以簡單地將其添加到具有零時間部分的參考時間戳,然后使用適當(dāng)?shù)牟季指袷交瘯r間。
參考時間可以是零值time.Time或unix參考時間。
例如:
ms := int64(65104)
var t time.Time // Zero time
t = t.Add(time.Duration(ms) * time.Millisecond)
fmt.Println(t.Format("15:04:05,000"))
t = time.UnixMilli(ms)
fmt.Println(t.Format("15:04:05,000"))
這將輸出(在Go Playground上嘗試):
00:01:05,104
00:01:05,104
如果您想處理超過一天的持續(xù)時間,則此解決方案不適合。一個可能的解決辦法是自己計算小時,其余的(分、秒、毫秒)用上面的方法。
例如:
const msInHour = 60 * 60 * 1000
func format(ms int64) string {
hours := ms / msInHour
ms = ms % msInHour
t := time.UnixMilli(ms)
return fmt.Sprintf("%02d:%s", hours, t.Format("04:05,000"))
}
測試它:
fmt.Println(format(65104))
fmt.Println(format(27*60*60*1000 + 65104))
這將輸出(在Go Playground上嘗試):
00:01:05,104
27:01:05,104
推出自己的解決方案
如果你不想使用time包,你可以自己做。該算法只是除法和余數(shù)。例如,毫秒部分是除以 1000 后的余數(shù)。此后的秒數(shù)是除以 60 后的余數(shù),依此類推。
例如:
func format(n int64) string {
ms := n % 1000
n /= 1000
sec := n % 60
n /= 60
min := n % 60
n = n / 60
return fmt.Sprintf("%02d:%02d:%02d,%03d", n, min, sec, ms)
}
這也處理超過一天的持續(xù)時間。測試它:
fmt.Println(format(65104))
fmt.Println(format(27*60*60*1000 + 65104))
這將輸出(在Go Playground上嘗試):
00:01:05,104
27:01:05,104
- 1 回答
- 0 關(guān)注
- 227 瀏覽
添加回答
舉報
