確定兩個time.Time 物件之間以小時、分鐘為單位的差異,秒是一個常見的任務。然而,Go 中的 time 套件並沒有直接提供執行此計算的方法。
解決方案在於使用 Time.Sub() 方法,該方法傳回兩個 time.Time 物件作為 time.Duration 值。 time.Duration 表示奈秒精度的持續時間。
要得到所需的格式(HH:mm:ss),我們可以使用Add() 方法和持續時間值來建構一個新的time.Time 值:
diff := t2.Sub(t1) formattedDiff := time.Time{}.Add(diff) fmt.Println(formattedDiff.Format("15:04:05"))
這將以所需的格式列印差異,即使不到一天。
如果時差可能超過一天,計算時差就會變得更加複雜,因為涉及到年、月、日的計算。在這種情況下,可以使用如下所示的輔助函數:
func diff(a, b time.Time) (year, month, day, hour, min, sec int) { // Calculate the difference in seconds diffSeconds := int(a.Sub(b).Seconds()) // Calculate days and remaining seconds days := diffSeconds / (24 * 3600) remainingSeconds := diffSeconds % (24 * 3600) // Calculate hours and remaining seconds hours := remainingSeconds / 3600 remainingSeconds %= 3600 // Calculate minutes and remaining seconds minutes := remainingSeconds / 60 seconds := remainingSeconds % 60 // Convert days to years, months, and remaining days yearDays := days / 365 yearSeconds := yearDays * 365 * 24 * 3600 months := (days - yearDays*365) / 30 daySeconds := (days - yearDays*365 - months*30) * 24 * 3600 return yearDays, months, days, hours, minutes, seconds }
此函數傳回年、月、日、小時、分鐘和秒的差異,允許計算時間差異超過24小時。
以上是如何計算兩個 Go time.Time 物件之間的差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!