golang array time.Time 按 time.Duration 分组
时间: 2023-06-21 09:14:49 浏览: 123
你可以使用一个 `map[time.Duration][]time.Time` 来按照时间间隔分组。具体来说,你可以通过将时间转换为 Unix 时间戳,计算出时间间隔,然后将时间添加到相应的时间间隔对应的数组中,如下所示:
```go
func groupByDuration(times []time.Time, duration time.Duration) map[time.Duration][]time.Time {
groups := make(map[time.Duration][]time.Time)
for _, t := range times {
timestamp := t.Unix()
groupKey := time.Duration(timestamp/duration.Seconds()) * duration
groups[groupKey] = append(groups[groupKey], t)
}
return groups
}
```
这个函数接受一个 `times` 数组和一个 `duration` 时间间隔作为参数,并返回一个 `map[time.Duration][]time.Time`,其中键是时间间隔,值是在该时间间隔内的时间数组。需要注意的是,这个函数假定输入的时间数组已经按照时间顺序排好了序。如果时间数组未排序,则可以在循环之前对其进行排序。
相关问题
golang time.Until
在 Golang 中,可以使用 `time.Until()` 方法计算当前时间到指定时间的时间差。例如:
```go
package main
import (
"fmt"
"time"
)
func main() {
// 计算距离今天晚上 12 点还有多长时间
t := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 23, 59, 59, 0, time.Local)
duration := time.Until(t)
// 输出时间差
fmt.Println(duration)
}
```
在上面的示例中,我们计算了距离今天晚上 23:59:59 还有多长时间,并将结果存储在 `duration` 变量中。最后,我们输出了时间差。
需要注意的是,`time.Until()` 方法返回的是 `time.Duration` 类型的值,表示两个时间之间的时间差。可以使用 `Duration` 类型的方法来获取时间差的小时、分钟、秒等部分。
阅读全文