我有一个time.Time
价值time.Now()
,我想得到另一个正好是1个月前的时间。
我知道可以用time.Sub()
(想要另一个time.Time
)进行减法,但这将导致a,time.Duration
而我反过来需要它。
我有一个time.Time
价值time.Now()
,我想得到另一个正好是1个月前的时间。
我知道可以用time.Sub()
(想要另一个time.Time
)进行减法,但这将导致a,time.Duration
而我反过来需要它。
Answers:
为了回应托马斯·布朗(Thomas Browne)的评论,因为lnmx的答案仅适用于减去日期,所以这是对他的代码的修改,适用于从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
根据需要。
ParseDuration
静态值!只需使用-10 * time.Minute
,这就是那些常量的定义。例如,这time.Now().Add(-10 * time.Minute)
就是您所需要的。
now.Add(-10 * time.Minute)
为now.Add(time.Duration(-10) * time.Minute)
...
您可以否定time.Duration
:
then := now.Add(- dur)
您甚至可以将相time.Duration
对于0
:
if dur > 0 {
dur = - dur
}
then := now.Add(dur)
您可以在http://play.golang.org/p/ml7svlL4eW中看到一个有效的示例
-1 * dur
可以工作,但是d := -1 ; dur = d * dur
会产生错误:“ int和
根据手册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)
}