Très nouveau sur le 'Go'. La question pourrait être simple.
J'ai deux objets time.Time et je veux faire la différence entre les deux en termes d'heures/minutes/secondes. Disons:
t1 = 2016-09-09 19:09:16 +0530 IST
t2 = 2016-09-09 19:09:16 +0530 IST
Dans le cas ci-dessus, puisque la différence est 0. Cela devrait me donner 00:00:00. Prenons un autre cas:
t1 = 2016-09-14 14:12:48 +0530 IST
t2 = 2016-09-14 14:18:29 +0530 IST
Dans ce cas, la différence serait de 00:05:41. J'ai regardé le https://godoc.org/time mais je n'ai rien pu en faire.
Vous pouvez utiliser Time.Sub()
pour obtenir la différence entre les 2 time.Time
valeurs, le résultat sera une valeur de time.Duration
.
Une fois imprimé, un time.Duration
Se formate "intelligemment":
t1 := time.Now()
t2 := t1.Add(time.Second * 341)
fmt.Println(t1)
fmt.Println(t2)
diff := t2.Sub(t1)
fmt.Println(diff)
Sortie:
2009-11-10 23:00:00 +0000 UTC
2009-11-10 23:05:41 +0000 UTC
5m41s
Si vous voulez le format d'heure HH:mm:ss
, Vous pouvez construire une valeur time.Time
Et utiliser sa méthode Time.Format()
comme ceci:
out := time.Time{}.Add(diff)
fmt.Println(out.Format("15:04:05"))
Sortie:
00:05:41
Essayez les exemples sur le Go Playground .
Bien sûr, cela ne fonctionnera que si le décalage horaire est inférieur à un jour. Si la différence peut être plus grande, alors c'est une autre histoire. Le résultat doit inclure des jours, des mois et des années. La complexité augmente considérablement. Voir cette question pour plus de détails:
golang time.Depuis () avec mois et années
La solution présentée ici résout ce problème en affichant une fonction avec signature:
func diff(a, b time.Time) (year, month, day, hour, min, sec int)
Vous pouvez l'utiliser même si vos heures sont dans les 24 heures (auquel cas year
, month
et day
seront 0
).
En fait, la documentation du package time
en parle:
https://godoc.org/time#Time.Sub
https://godoc.org/time#Duration.Hours
Vous devez produire un objet Duration
à l'aide de Sub()
, puis utiliser l'un des Seconds()
, Minutes()
, Hours()
.
package main
import (
"fmt"
"time"
)
func main() {
t1 := time.Date(1984, time.November, 3, 13, 0, 0, 0, time.UTC)
t2 := time.Date(1984, time.November, 3, 10, 0, 0, 0, time.UTC)
fmt.Printf("The hours diffrence is: %d", t1.Sub(t2).Hours())
}
Pour compléter la réponse de Shmulik Klein:
Une autre façon de calculer des heures/minutes/secondes disjointes sur un temps.
https://play.golang.org/p/VRoXG5NxLo
package main
import (
"fmt"
"math"
"time"
)
func main() {
t1 := time.Date(1984, time.November, 3, 13, 0, 0, 0, time.UTC)
t2 := time.Date(1984, time.November, 3, 10, 23, 34, 0, time.UTC)
hs := t1.Sub(t2).Hours()
hs, mf := math.Modf(hs)
ms := mf * 60
ms, sf := math.Modf(ms)
ss := sf * 60
fmt.Println(hs, "hours", ms, "minutes", ss, "seconds")
}
2 heures 36 minutes 25.999999999999375 secondes
remarque: