Подтвердить что ты не робот

Вычитание времени. Время от времени в Go

У меня есть значение time.Time, полученное из time.Now(), и я хочу получить другое время, которое ровно месяц назад.

Я знаю, что вычитание возможно с помощью time.Sub() (который хочет другой time.Time), но это приведет к time.Duration, и мне это нужно наоборот.

4b9b3361

Ответ 1

Попробуйте 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)
}

Выдает:

now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC

Игровая площадка: http://play.golang.org/p/QChq02kisT

Ответ 2

В ответ на комментарий Томаса Брауна, потому что lnmx answer работает только для вычитания даты, здесь есть модификация его кода, который работает для вычитания времени с момента времени. Тип времени.

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    then := now.Add(-10 * time.Minute)
    fmt.Println("10 minutes ago:", then)
}

Выдает:

now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC

Ответ 3

Вы можете отменить time.Duration:

then := now.Add(- dur)

Вы даже можете сравнить time.Duration с 0:

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

Вы можете увидеть рабочий пример в http://play.golang.org/p/ml7svlL4eW