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.
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.
Produkuje:
Nie wspominając o tym, że możesz również użyć
time.Hour
lubtime.Second
zamiasttime.Minute
zgodnie ze swoimi potrzebami.Plac zabaw: https://play.golang.org/p/DzzH4SA3izp
źródło
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)
donow.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
:Możesz nawet porównać
time.Duration
z0
:Możesz zobaczyć działający przykład pod adresem http://play.golang.org/p/ml7svlL4eW
źródło
-1 * dur
zadziała, aled := -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:
https://play.golang.org/p/63p-T9uFcZo
źródło