减去时间。在Go中持续时间

时间:2014-10-09 18:40:53

标签: go

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

我知道可以使用time.Sub()(需要另一个time.Time)进行减法,但这会产生time.Duration,我需要反过来。

4 个答案:

答案 0 :(得分:102)

回应Thomas Browne的评论,因为lnmx's answer仅适用于减去日期,所以这里修改了他的代码,用于从time.Time类型中减去时间。

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

答案 1 :(得分:95)

尝试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 :(得分:35)

您可以否定time.Duration

then := now.Add(- dur)

您甚至可以将time.Duration0进行比较:

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

您可以在http://play.golang.org/p/ml7svlL4eW

看到一个有效的例子

答案 3 :(得分:0)

age name user_id 1 20 tom 2 25 john 3 30 tim 会很乐意接受负时长as per manual。否则,无需抵消持续时间,您可以首先获得确切的持续时间。

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

time.ParseDuration

https://play.golang.org/p/63p-T9uFcZo