2016-04-13 9 views
0

Ich versuche die Zeit vor 10 Minuten zu berechnen. Warum kann ich diese Berechnung nicht mit Variablen durchführen (verwendbar für eine for-Schleife). See -Kann ich Variablen für Zeitberechnungen in Golang nicht verwenden?

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 

    // the time now 
    fmt.Println(time.Now()) 

    // the time 50 minutes ago - WORKS 
    diff := (60 - 10) * time.Minute 
    newTime := time.Now().Add(-diff) 
    fmt.Println(newTime) 

    // the time 50 minutes ago - DOESN'T WORKS! 
    i := 10 
    diff = (60 - i) * time.Minute 
    newTime = time.Now().Add(-diff) 
    fmt.Println(newTime) 
} 

Warum diff = (60 - i) * time.Minute funktioniert nicht? Diese ist der Fehler Ich erhalte -

prog.go:20: invalid operation: (60 - i) * time.Minute (mismatched types int and time.Duration) 

Für Go Spielplatz: https://play.golang.org/p/TJ03K0ULg2

Vielen Dank!

Antwort

5

Wie der Fehler sagt, haben Sie nicht übereinstimmende Typen. Konvertieren Sie die Integer-Ergebnis in eine time.Duration:

diff = time.Duration(60-i) * time.Minute 
0

time.Duration tatsächlich int64 wird geben, also wenn Sie Variable verwenden möchten, machen, was Sie wollen, nur um die Variable time.Duration erklären, wie folgt aus:

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 

    // the time now 
    fmt.Println(time.Now()) 

    // the time 50 minutes ago - WORKS 
    diff := (60 - 10) * time.Minute 
    newTime := time.Now().Add(-diff) 
    fmt.Println(newTime) 

    // the time 50 minutes ago - DOESN'T WORKS! 
    var i time.Duration 
    diff = (60 - i) * time.Minute 
    newTime = time.Now().Add(-diff) 
    fmt.Println(newTime) 
}