在功能上按秒操作

时间:2017-08-01 08:39:31

标签: go time

我目前正在处理一个项目,但我在一个返回startTime呼叫的函数中遇到问题。这是我的代码:

func (bt *Hc34) getStartDate(endTime time.Time, duration int) time.Time {
     startTime := endTime
     startTime.Second = endTime.Second - duration

     return startTime
}

我收到了这个错误:

beater/hc34.go:268: invalid operation: endTime.Second - duration (mismatched types func() int and int)
beater/hc34.go:268: cannot assign to startTime.Second

1 个答案:

答案 0 :(得分:2)

time.Time没有导出字段Second,因此startTime.Second无效。

您可以使用Time.Add()方法将time.Duration值添加到time.Time值。要从中减去持续时间,只需将您添加的值乘以-1

func (bt *Hc34) getStartDate(endTime time.Time, duration int) time.Time {
    return endTime.Add(time.Duration(-duration) * time.Second)
}

getStartDate()函数示例(非方法):

now := time.Now()
fmt.Println(now)
fmt.Println(getStartDate(now, 60))

Go Playground上的输出:

2009-11-10 23:00:00 +0000 UTC
2009-11-10 22:59:00 +0000 UTC

我还建议您阅读有关使用从整数构建的time.Duration值的答案:Conversion of time.Duration type microseconds value to milliseconds