2014-10-09 15 views

Odpowiedz

58

Spróbuj 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) 
} 

Produkuje:

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

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

+0

To jest idealne! Dzięki! –

+11

co powiesz na odjęcie czasu? –

+0

Awesome zapisany mój dzień – sector11

64

W odpowiedzi na komentarz Thomas Browne, ponieważ lnmx's answer działa tylko na odjęcie datę, tutaj jest modyfikacją jego kodu, który działa na odjęcie czasu od czasu. Typ czasu.

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    now := time.Now() 

    fmt.Println("now:", now) 

    then := now.Add(-10 * time.Minute) 
    fmt.Println("10 minutes ago:", then) 
} 

Produkuje:

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

Nie użytkownika 'ParseDuration' dla wartości statycznych! Wystarczy użyć '-10 * time.Minute', to właśnie te stałe są zdefiniowane. Na przykład. just 'time.Now(). Dodaj (-10 * time.Minute)' to wszystko, czego potrzebujesz. –

+1

Dobra uwaga, edytowane. – cchio

+7

Wow, API czasu jest tak niespójne. time.Add to dodanie czasu trwania, natomiast time.Sub ma odjąć czas. Cieszę się, że znalazłem tę odpowiedź, ponieważ patrzyłem na funkcję Sub i nigdy bym nie przypuszczał, że ma ona inny podpis od Add. –

20

można zanegować time.Duration:

then := now.Add(- dur) 

Można nawet porównać time.Duration przeciwko 0:

if dur > 0 { 
    dur = - dur 
} 

then := now.Add(dur) 

Możesz zobaczyć działający przykład na http://play.golang.org/p/ml7svlL4eW

+0

Jest jednak haczyk: '-1 * dur' zadziała, ale' d: = -1; dur = d * dur' wygeneruje błąd: "niedopasowane typy int i time.Duration" – BlakBat

+0

To jest właściwa odpowiedź na tytuł pytania i powinna zostać oznaczona jako odpowiedź. – selalerer