减去时间,从时间到持续时间

我有一个从 time.Now()获得的 time.Time值,我想得到另一个时间,正好是1个月前。

我知道减法是可能的与 time.Sub()(它想要另一个 time.Time) ,但这将导致一个 time.Duration,我需要它反过来。

168996 次浏览

试试 添加日期:

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

作为对 Thomas Browne 评论的回应,因为 Inmx 的回答只能用来减去一个日期,下面是对他的代码的一个修改,可以用来减去一个时间的时间。时间类型。

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.Hourtime.Second而不是 time.Minute

操场: https://play.golang.org/p/DzzH4SA3izp

你可以否定 time.Duration:

then := now.Add(- dur)

你甚至可以比较 time.Duration0:

if dur > 0 {
dur = - dur
}


then := now.Add(dur)

您可以在 http://play.golang.org/p/ml7svlL4eW上看到一个工作示例

time.ParseDuration,它会很高兴地接受负持续时间,按照说明书。否则,没有必要否定一个可以得到精确持续时间的持续时间。

例如,当你需要减去一个半小时,你可以这样做:

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

Https://play.golang.org/p/63p-t9ufczo