在我的Go应用程序中,我正在尝试检查一段时间内日期的出现。
if survey.StartPeriod.Before(time.Now()) && survey.EndPeriod.After(time.Now()) {
fmt.Println("1 BLOCK")
}
else if survey.EndPeriod.Before(time.Now()) {
fmt.Println("2 BLOCK")
}
如果我有这样的输入数据(时段内的当前时间):
Current TIME | 2019-03-28 21:02:47.0377305 +0600 +06 m=+60.748044601
START_PERIOD | 2019-03-28 21:00:00 +0000 +0000
END_PERIOD | 2019-03-28 21:05:00 +0000 +0000
我想在1个块内运行代码。仅当我在两个期间都使用Before
函数时,当前代码才会运行该块。我不确定这是正确的。
如果我有这样的传入数据(当前时间超出end_period):
Current TIME | 2019-03-28 21:10:47.0377305 +0600 +06 m=+60.748044601
START_PERIOD | 2019-03-28 21:00:00 +0000 +0000
END_PERIOD | 2019-03-28 21:05:00 +0000 +0000
我想在2个块内运行代码。正确知道它工作不正确。如何正确使程序逻辑正确?
编辑:
您会看到CURRENT_TIME
在范围内。
CURRENT_TIME | 2019-03-29 08:32:06.1375323 +0600 +06 m=+60.318452301
START_PERIOD | 2019-03-29 08:30:00 +0000 +0000
END_PERIOD | 2019-03-29 08:31:00 +0000 +0000
当我尝试测试功能InTimeSpan
时,它返回的false
值不正确。我真的很困惑。为什么会发生?!
log.Println(InTimeSpan(survey.StartPeriod, survey.EndPeriod, time.Now()))
// return false
答案 0 :(得分:1)
当前正在检查的是当前时间是否在给定范围内。您可能希望将time.Now
与其他时间交换以检查日期的出现。
但是要考虑以下几点:
func InTimeSpan(start, finish time.Time, timeToCheck time.Time) bool {
return start.Before(timeToCheck) && finish.After(timeToCheck)
}
func InTimeSpan(start, finish time.Time, timeToCheck time.Time) bool {
return start.UTC().Before(timeToCheck) && finish.UTC().After(timeToCheck)
}
真的很me脚的演示:https://play.golang.org/p/rzv3coztN4Z