我从time.Time
获得time.Now()
值,我希望得到另一个时间,正好是1个月前。
我知道可以使用time.Sub()
(需要另一个time.Time
)进行减法,但这会产生time.Duration
,我需要反过来。
答案 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.Hour
或time.Second
代替time.Minute
。
答案 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
答案 2 :(得分:35)
您可以否定time.Duration
:
then := now.Add(- dur)
您甚至可以将time.Duration
与0
进行比较:
if dur > 0 {
dur = - dur
}
then := now.Add(dur)
看到一个有效的例子
答案 3 :(得分:0)
有 age name
user_id
1 20 tom
2 25 john
3 30 tim
会很乐意接受负时长as per manual。否则,无需抵消持续时间,您可以首先获得确切的持续时间。
例如当您需要减去一个半小时时,可以这样做:
time.ParseDuration