Mam time.Timewartość uzyskaną z time.Now()i chcę uzyskać inny czas, czyli dokładnie 1 miesiąc temu.
Wiem, że odejmowanie jest możliwe z time.Sub()(który chce innego time.Time), ale to spowoduje a time.Durationi potrzebuję tego na odwrót.
Mam time.Timewartość uzyskaną z time.Now()i chcę uzyskać inny czas, czyli dokładnie 1 miesiąc temu.
Wiem, że odejmowanie jest możliwe z time.Sub()(który chce innego time.Time), ale to spowoduje a time.Durationi potrzebuję tego na odwrót.
Odpowiedzi:
Wypró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
Plac zabaw: http://play.golang.org/p/QChq02kisT
Subaby odjąć czas. Duh!
W odpowiedzi na komentarz Thomasa Browne'a, ponieważ odpowiedź lnmx działa tylko w przypadku odejmowania daty, oto modyfikacja jego kodu, która działa w celu odejmowania czasu od czasu.
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)
}
Produkuje:
now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC
Nie wspominając o tym, że możesz również użyć time.Hourlub time.Secondzamiast time.Minutezgodnie ze swoimi potrzebami.
Plac zabaw: https://play.golang.org/p/DzzH4SA3izp
ParseDurationużywaj wartości statycznych! Po prostu użyj -10 * time.Minute, po to są zdefiniowane te stałe. Np. time.Now().Add(-10 * time.Minute)To wszystko, czego potrzebujesz.
now.Add(-10 * time.Minute)do now.Add(time.Duration(-10) * time.Minute)w przypadku, gdy pojawi się błąd podczas mnożenia czasu trwania przez wartość int ...
Możesz zanegować time.Duration:
then := now.Add(- dur)
Możesz nawet porównać time.Durationz 0:
if dur > 0 {
dur = - dur
}
then := now.Add(dur)
Możesz zobaczyć działający przykład pod adresem http://play.golang.org/p/ml7svlL4eW
-1 * durzadziała, ale d := -1 ; dur = d * durwygeneruje błąd: „niedopasowane typy int i time.Duration”
Są, time.ParseDurationktóre z radością zaakceptują negatywne czasy trwania, zgodnie z instrukcją . W przeciwnym razie nie ma potrzeby negowania czasu trwania, w którym można uzyskać dokładny czas trwania w pierwszej kolejności.
Np. Kiedy musisz odjąć półtorej godziny, możesz to zrobić w następujący sposób:
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)
}