Datetime 如何获取元组切片(小时、分钟)

Datetime 如何获取元组切片(小时、分钟),datetime,go,time,tuples,slice,Datetime,Go,Time,Tuples,Slice,我有一个无法解决的问题。我正在使用创建元组 我有一张会议记录表: minutes := int{0, 30} // Minutes are 0 and 30 和四个参数:开始,开始突破,停止,停止: start := tuple.NewTupleFromItems(9, 30) // It represents "9:30" startBreak := tuple.NewTupleFromItems(12, 0) // It represents "12:00" stop := tuple.N

我有一个无法解决的问题。我正在使用创建元组

我有一张会议记录表:

minutes := int{0, 30} // Minutes are 0 and 30
和四个参数:
开始
开始突破
停止
停止

start := tuple.NewTupleFromItems(9, 30) // It represents "9:30"
startBreak := tuple.NewTupleFromItems(12, 0) // It represents "12:00"
stop := tuple.NewTupleFromItems(21, 0) // It represents "21:00"
stopBreak := tuple.NewTupleFromItems(14, 30) // It represents "14:30"
我想使用
minutes
切片中的所有分钟数获取一个元组切片
(小时,分钟)
,并且它们不能包含在范围
startBreak stopBreak
(它可以等于
startBreak
stopBreak
,因此范围将变为
12:30、13:00、13:30、14:00
)和
stop-start
(它可以等于
start
stop
,因此范围将变为
21:30、22:00、22:30、…、8:30、9:00

例如,使用这四个参数,最终结果将是:

9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30, 18:00, 18:30, 19:00, 19:30, 20:00, 20:30, 21:00

这里有一个最小的代码来演示这一点,我没有进行任何数据验证

func periods(minutes, start, startBreak, stopBreak, stop *tuple.Tuple) (out []tuple.Tuple) {

    // next() moves current to the next minute interval
    i := 0
    curr := tuple.NewTupleFromItems(start.Get(0), minutes.Get(0))
    next := func() {
        i = (i + 1) % minutes.Len()
        curr.Set(1, minutes.Get(i))
        if i == 0 {
            curr.Set(0, curr.Get(0).(int)+1)
        }
    }

    for ; curr.Le(stop); next() {
        if (curr.Ge(start) && curr.Le(startBreak)) || (curr.Ge(stopBreak) && curr.Le(stop)) {
            out = append(out, *curr.Copy())
        }
    }

    return out
}

我建议您在代码的哪一部分遇到问题。@ssemilla您是对的。下次我会的!