web-dev-qa-db-fra.com

Soustraire le temps. Durée du temps dans Go

J'ai une valeur time.Time Obtenue à partir de time.Now() et je souhaite obtenir une autre heure, il y a exactement 1 mois.

Je sais que la soustraction est possible avec time.Sub() (qui veut un autre time.Time), Mais cela donnera un time.Duration Et j'en ai besoin dans l'autre sens.

85

Essayez 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)
}

Produit:

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

Aire de jeux: http://play.golang.org/p/QChq02kisT

106
lnmx

En réponse au commentaire de Thomas Browne, parce que réponse de lnmx ne fonctionne que pour soustraire une date, voici une modification de son code qui fonctionne pour soustraire heure à un type heure.Heure.

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)
}

Produit:

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

Sans oublier, vous pouvez aussi utiliser time.Hour ou time.Second au lieu de time.Minute selon vos besoins.

Aire de jeux: https://play.golang.org/p/DzzH4SA3izp

111
cchio

Vous pouvez nier un time.Duration:

then := now.Add(- dur)

Vous pouvez même comparer un time.Duration contre 0:

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

Vous pouvez voir un exemple de travail sur http://play.golang.org/p/ml7svlL4eW

36
docwhat