datetime - 如何检查某个时间段内某个日期的出现
问题描述
在我的 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
解决方案
您当前正在检查的是您当前的时间是否在给定的范围内。您可能希望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
推荐阅读
- node.js - 是否可以在特定的 url 中使用相同的域(自定义系统)但不同的框架?
- mxgraph - 首次渲染后修改 mxGraph 形状中的颜色(更好,渐变)
- android - 当我在项目应用程序中安装并链接 react-native-admob 在加载时崩溃
- mysql - 如何修复表在 MySQL 8.2 中指定了两次?
- excel - 将使用空格分隔符的 txt 文件转换为制表符分隔符
- python - python抓取一页
- node.js - 如何使用 Nodejs 和 Expressjs 只允许一个用户同时连接?
- html - 如何将html传递给dust.js中的子模板
- java - JDK11 迁移:Eclipse 2018-12 中显示编译错误,但代码运行正常
- c# - 从 uwp 调用双工 wcf 服务方法无效