java - 我想检查时间间隔
问题描述
我想检查区间B,是否在区间A?我的解决方案正确吗?
解决方案:
Date fromA;
Data toA;
Date fromB;
Date toB;
if(fromA.getTime() <= fromB.getTime() && toB.getTime() <= toA.getTime()){
// true
}
解决方案
回答,您是否是指(非)重叠范围(而不是完全包含在其他范围内):
最容易看到正确性的是排除范围;然后否定条件。
范围 (a1, a2) 和 (b1, b2):
boolean excluding = a2 <= b1 || b2 <= a1
boolean overlapping = a2 > b1 && b2 > a1 // Negation
所以有一个从一个的交叉结束与另一个的开始进行比较。
你的代码一定是错的。正确的:
if (tomA.getTime() >= fromB.getTime() && toB.getTime() >= fromAgetTime()) {
由于getTime()
返回一个 long, ms sind 1970,可能在某一时刻被签名溢出。非常理论,但不是很好。
最好使用新的 java.time API 的端口,它提供更多功能,并使条件可读。
推荐阅读
- php - How to pass data to view only if it is defined?
- c++ - Boost.Spirit.Qi - 对原始数据类型进行边界检查
- azure-devops - VSTS 历史查询
- docker - 通过命令行安装 julia 包
- sql - 如何从表名查询中获取选择计数(x)
- abcpdf - 使用 ABCPDF 将另一个文档绘制为带圆角的图像
- react-native - 在反应原生应用程序中使用 styleguidist
- docker - .NET Core API 502 带有 Nginx 代理的 Docker 上的错误网关
- javascript - 知道表单 POST 目标是否生成错误的任何方法
- cmake - CMake:add_subdirectory 两次作为共享项目