我正在尝试找到一种方法来检查当前时间是否在时间窗口内。
输入是:upgradeDay []string
- 几天(例如 ["Sunday", "Tuesday"]
)upgradetime string
- 小时:分钟(例如 "22:04"
)upgradeDuration int64
- 时间量,来自 upgradetime
时间窗口有效的时间。最长可达 12 小时。
完整示例:upgradeDay
= ["Sunday", Tuesday"] , upgradetime
= "10:00", upgradeDuration
= 2 -> 时间窗口是每个星期日和星期二,从 10:00 到 12:00 点。
我尝试编写以下函数,但它在天/月/年之间的转换中不起作用:
func isInsideTimeWindow(upgradeDay []string, upgradeTime string, upgradeDuration int64) bool {
now := time.Now()
ut := strings.Split(upgradeTime, ":")
hour, _ := strconv.Atoi(ut[0])
min, _ := strconv.Atoi(ut[1])
// !! not working when now it's Monday 00:01 and got: upgradeDay = ["Sunday"], upgradeTime = 23:59, upgradeDuration = 2
twStart := time.Date(now.Year(), now.Month(), now.Day(), hour, min, 0, 0, now.Location())
twEnd := twStart.Add(time.Hour * time.Duration(upgradeDuration))
if !(now.After(twStart) && now.Before(twEnd)) {
return false
}
wd := now.Weekday().String()
for i := range upgradeDay {
if upgradeDay[i] == wd {
return true
}
}
return false
}
有人知道如何在 Go 中解决这个问题吗?
最佳答案
这是解决问题的一种方法:
package main
import "time"
type window struct { time.Time }
func (w window) isDay(s string) bool {
return w.Weekday().String() == s
}
func (w window) isHourRange(begin, end int) bool {
return w.Hour() >= begin && w.Hour() <= end
}
func main() {
w := window{
time.Now(),
}
{
b := w.isDay("Friday")
println(b)
}
{
b := w.isHourRange(20, 23)
println(b)
}
}
这假设只有一天是有效的,所以你需要修改它来处理多天。不过,这应该可以帮助您入门。
关于algorithm - 如何编写一个函数来检查当前时间是否在时间窗口内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63757342/