Mam time.Time
wartość 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.Duration
i potrzebuję tego na odwrót.
Mam time.Time
wartość 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.Duration
i 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
Sub
aby 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.Hour
lub time.Second
zamiast time.Minute
zgodnie ze swoimi potrzebami.
Plac zabaw: https://play.golang.org/p/DzzH4SA3izp
ParseDuration
uż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.Duration
z 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 * dur
zadziała, ale d := -1 ; dur = d * dur
wygeneruje błąd: „niedopasowane typy int i time.Duration”
Są, time.ParseDuration
któ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)
}