Tijd aftrekken. Duur van tijd in Go

Ik heb een time.Timewaarde verkregen van time.Now()en ik wil een andere tijd krijgen die precies 1 maand geleden is.

Ik weet dat aftrekken mogelijk is met time.Sub()(die een andere time.Timewil), maar dat zal resulteren in een time.Durationen ik heb het andersom nodig.


Antwoord 1, autoriteit 100%

Als reactie op de opmerking van Thomas Browne, omdat het antwoord van lnmxalleen werkt voor het aftrekken van een datum, volgt hier een wijziging van zijn code die werkt voor het aftrekken van tijd van een tijd.Tijdtype.

package main
import (
    "fmt"
    "time"
)
func main() {
    now := time.Now()
    fmt.Println("now:", now)
    count := 10
    then := now.Add(time.Duration(-count) * time.Minute)
    // if we had fix number of units to subtract, we can use following line instead fo above 2 lines. It does type convertion automatically.
    // then := now.Add(-10 * time.Minute)
    fmt.Println("10 minutes ago:", then)
}

Produceert:

now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC

Om nog maar te zwijgen, je kunt ook time.Hourof time.Secondgebruiken in plaats van time.Minute, afhankelijk van je behoeften.

Speeltuin: https://play.golang.org/p/DzzH4SA3izp


Antwoord 2, autoriteit 86%

Probeer AddDate:

package main
import (
    "fmt"
    "time"
)
func main() {
    now := time.Now()
    fmt.Println("now:", now)
    then := now.AddDate(0, -1, 0)
    fmt.Println("then:", then)
}

Produceert:

now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC

Speeltuin: http://play.golang.org/p/QChq02kisT


Antwoord 3, autoriteit 34%

U kunt een time.Durationnegeren:

then := now.Add(- dur)

Je kunt zelfs een time.Durationvergelijken met 0:

if dur > 0 {
    dur = - dur
}
then := now.Add(dur)

Je kunt een werkend voorbeeld zien op http://play.golang.org/p/ml7svlL4eW


Antwoord 4

Er is time.ParseDurationdie met plezier negatieve duur accepteert, volgens handleiding. Anders gezegd, het is niet nodig om een ​​duur te ontkennen waar u in de eerste plaats een exacte duur kunt krijgen.

Bijvoorbeeld als je anderhalf uur moet aftrekken, kun je dat als volgt doen:

package main
import (
    "fmt"
    "time"
)
func main() {
    now := time.Now()
    fmt.Println("now:", now)
    duration, _ := time.ParseDuration("-1.5h")
    then := now.Add(duration)
    fmt.Println("then:", then)
}

https://play.golang.org/p/63p-T9uFcZo

Other episodes