Tengo un time.Time
valor obtenido time.Now()
y quiero obtener otro tiempo que es exactamente hace 1 mes.
Sé que es posible restar con time.Sub()
(que quiere otro time.Time
), pero eso resultará en un time.Duration
y lo necesito al revés.
Prueba 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)
}
Produce:
now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC
Zona de juegos: http://play.golang.org/p/QChq02kisT
Sub
restar tiempo. ¡Duh!En respuesta al comentario de Thomas Browne, debido a que la respuesta de lnmx solo funciona para restar una fecha, aquí hay una modificación de su código que funciona para restar tiempo de un tipo de tiempo.
Produce:
Sin mencionar que también puede usar
time.Hour
o entime.Second
lugar detime.Minute
según sus necesidades.Zona de juegos: https://play.golang.org/p/DzzH4SA3izp
fuente
ParseDuration
utilices valores estáticos! Solo use-10 * time.Minute
, para eso están definidas esas constantes. Por ejemplo,time.Now().Add(-10 * time.Minute)
es todo lo que necesita.now.Add(-10 * time.Minute)
ennow.Add(time.Duration(-10) * time.Minute)
en caso de que obtenga un error al multiplicar una duración por un valor int ...Puede negar un
time.Duration
:Incluso puedes comparar a
time.Duration
contra0
:Puede ver un ejemplo funcional en http://play.golang.org/p/ml7svlL4eW
fuente
-1 * dur
funcionará, perod := -1 ; dur = d * dur
generará un error: "tipos no coincidentes int y time.Duration"Hay
time.ParseDuration
que aceptarán felizmente duraciones negativas, según el manual . Dicho de otra manera, no es necesario negar una duración en la que puede obtener una duración exacta en primer lugar.Por ejemplo, cuando necesite restar una hora y media, puede hacerlo así:
https://play.golang.org/p/63p-T9uFcZo
fuente