簡體   English   中英

time.Duration 之間的絕對差異

[英]Absolute difference between time.Duration

我有 2 個time.Duration類型的變量。 我需要找到它們之間的持續時間差異。

例如:

  • v1 = 1 秒和 v2 = 10 秒——相差 9 秒。
  • v1 = 10 秒和 v2 = 1 秒 — 差異也是 9 秒。

兩個變量可以有不同的小時、分鍾等值。

如何在 Go 中做到這一點?

嘗試這個:

package main

import (
    "fmt"
    "time"
)

func main() {
    a := 1 * time.Second
    b := 10 * time.Second
    c := absDiff(a, b)
    fmt.Println(c)         // 9s
    fmt.Println(absDiff(b, a)) // 9s

}
func absDiff(a, b time.Duration) time.Duration {
    if a >= b {
        return a - b
    }
    return b - a
}

這是另一種形式:

package main

import (
    "fmt"
    "time"
)

func main() {
    a := 1 * time.Second
    b := 10 * time.Second
    c := abs(a - b)
    fmt.Println(c) // 9s
}

func abs(a time.Duration) time.Duration {
    if a >= 0 {
        return a
    }
    return -a
}

Go 1.19

function Abs已添加到該語言中,因此您可以使用它而不是自己滾動:

func main() {
    d1 := time.Second * 10
    d2 := time.Second

    sub1 := d1 - d2
    sub2 := d2 - d1

    fmt.Println(sub1.Abs()) // 9s
    fmt.Println(sub2.Abs()) // 9s
}

一個優雅的解決方案是使用 bitshift >>

func absDuration(d time.Duration) time.Duration {
   s := d >> 63 
   return (d ^ s) - s
}

如果左操作數為負,Golang 中的位移是邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM