gpt4 book ai didi

datetime - 如何检查某个日期在一段时间内的出现

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:04 25 4
gpt4 key购买 nike

在我的 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 个 block 内运行代码。仅当我对两个期间都使用 Before 函数时,我当前的代码才会运行该 block 。我不确定它是否正确。

如果我有这样的传入数据(当前时间在 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 个 block 内运行代码。正确知道它工作不正确。如何正确的编写这个程序逻辑?

编辑:

如您所见,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

最佳答案

您当前正在检查的是您的当前时间是否在给定范围内。您可能希望将 time.Now 与另一个时间交换以检查日期是否出现。

但是有几点需要考虑:

  • 把这个逻辑放到一个外部函数中,因为它只需要用 true 或 false 来响应,就像这样很简单:
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)
}

真正蹩脚的演示:https://play.golang.org/p/rzv3coztN4Z

关于datetime - 如何检查某个日期在一段时间内的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com