Вычитание времени.Продолжительность от времени в Go


у меня есть time.Time значением, полученным из time.Now() и я хочу еще раз это ровно 1 месяц назад.

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

3 60

3 ответа:

попробовать 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

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

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)
}

выдает:

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

не говоря уже о том, что вы также можете использовать time.Hour или time.Second вместо time.Minute согласно вашим потребностям.

детская площадка:https://play.golang.org/p/DzzH4SA3izp

вы можете отрицать a time.Duration:

then := now.Add(- dur)

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

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

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