下面是一个从现在开始为每周事件获取第二天的示例。如果这不是您想要的,请在您的问题中添加一些测试示例。
package main
import (
"fmt"
"time"
)
func nextWeeklyEvent(t time.Time, weekday time.Weekday, hour, minute int) time.Time {
days := int((7 + (weekday - t.Weekday())) % 7)
y, m, d := t.AddDate(0, 0, days).Date()
return time.Date(y, m, d, hour, minute, 0, 0, t.Location())
}
func main() {
now := time.Now().Round(time.Second)
for i := 0; i < +7; i++ {
next := nextWeeklyEvent(now, time.Wednesday, 12, 0)
fmt.Println("now: ", now, now.Weekday())
fmt.Println("next:", next, next.Weekday())
fmt.Println()
now = now.AddDate(0, 0, 1)
}
}
输出:
now: 2017-10-21 14:30:17 -0400 EDT Saturday
next: 2017-10-25 12:00:00 -0400 EDT Wednesday
now: 2017-10-22 14:30:17 -0400 EDT Sunday
next: 2017-10-25 12:00:00 -0400 EDT Wednesday
now: 2017-10-23 14:30:17 -0400 EDT Monday
next: 2017-10-25 12:00:00 -0400 EDT Wednesday
now: 2017-10-24 14:30:17 -0400 EDT Tuesday
next: 2017-10-25 12:00:00 -0400 EDT Wednesday
now: 2017-10-25 14:30:17 -0400 EDT Wednesday
next: 2017-10-25 12:00:00 -0400 EDT Wednesday
now: 2017-10-26 14:30:17 -0400 EDT Thursday
next: 2017-11-01 12:00:00 -0400 EDT Wednesday
now: 2017-10-27 14:30:17 -0400 EDT Friday
next: 2017-11-01 12:00:00 -0400 EDT Wednesday
游乐场:https://play.golang.org/p/m1rYD72-nx
这正是我所期待的:基于周日的滚动。 感谢您的输入和启发我! – d0x1p2