检查 LocalDateTime 是否在时间范围内

2024-04-21

我的时间 A 应该在时间 B 的 90 分钟范围内(之前和之后)。

示例:时间为 4:00 pm ,时间 A 应介于 2:30 pm (-90) 到 5:30 pm (+90) 之间

尝试了以下方法:

if(timeA.isAfter(timeB.minusMinutes(90)) || timeA.isBefore(timeB.plusMinutes(90))) {
    return isInRange;   
}

你能帮我看看这里的逻辑有什么问题吗?


As @JB Nizet 在评论中说 https://stackoverflow.com/questions/46942351/checking-if-localdatetime-falls-within-a-time-range/46943265#comment80832159_46942351,您正在使用OR操作员 (||).
所以你正在测试是否A is after B - 90 OR A is before B + 90。如果仅满足其中一个条件,则返回true.

检查是否A在范围内,两个条件都必须满足,所以你必须使用AND操作员 (&&):

if (timeA.isAfter(timeB.minusMinutes(90)) && timeA.isBefore(timeB.plusMinutes(90))) {
    return isInRange;   
}

但上面的代码没有返回true if A is exactly之前或之后 90 分钟B。如果你想让它返回true当差异也正好是 90 分钟时,您必须更改条件来检查:

// lower and upper limits
LocalDateTime lower = timeB.minusMinutes(90);
LocalDateTime upper = timeB.plusMinutes(90);
// also test if A is exactly 90 minutes before or after B
if ((timeA.isAfter(lower) || timeA.equals(lower)) && (timeA.isBefore(upper) || timeA.equals(upper))) {
    return isInRange;
}

另一种选择是使用java.time.temporal.ChronoUnit得到之间的差异A and B以分钟为单位,并检查其值:

// get the difference in minutes
long diff = Math.abs(ChronoUnit.MINUTES.between(timeA, timeB));
if (diff <= 90) {
    return isInRange;
}

I used Math.abs因为差异可能是负数,如果A是在之后B(所以调整为正数)。然后我检查差异是否小于(或等于)90 分钟。你可以将其更改为if (diff < 90)如果你想排除“等于90分钟” case.


这些方法之间存在差异。

ChronoUnit舍入差异。例如如果A90 分 59 秒后B,差异将四舍五入为 90 分钟,并且if (diff <= 90)true,同时使用isBefore and equals将返回false.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 LocalDateTime 是否在时间范围内 的相关文章

随机推荐

  • Quartz.Net - 每 3 周周一、周二、周三

    我被 Quartz NET cron 触发器困住了 除了以下场景之外 我能够实现所有场景 每 X 周周一 周二 周三 我设法做到了这一点 0 31 15 MON 2 每个第二个星期一触发 它可以与0 31 15 MON 2 TUE 2 WE
  • Cesium:拾取实体并检索 WMS 信息

    我开发了一个建筑物的 3D 查看器 我现在尝试添加的是选择建筑实体下方的 WMS 网络地图服务 内容 基本上 我希望能够选择用户左键单击位置的建筑物 建筑物的颜色应该改变 有效 我想检索用户点击位置的网络地图服务信息 这是我到目前为止编写的
  • 使用 xgboost 的 Spark scala sbt 构建失败

    build sbt 清理包 给出以下错误 Resolving org fusesource jansi jansi 1 4 warn warn UNRESOLVED DEPENDENCIES warn warn ml dmlc xgboos
  • 写入文件,输出文件在哪里?

    FileWriter outFile null try outFile new FileWriter member txt catch IOException e TODO Auto generated catch block e prin
  • 在 gem 上运行测试的简单方法?

    有没有一种快速简便的方法来测试本地已安装的 gem 喜欢 gem test gem name to test rubygems 文档 http docs rubygems org read chapter 11说可以放gem run tes
  • PHP 5.3 向后兼容 PHP 5.2 吗?

    我开始学习PHP 我想使用 PHP 5 3 因为它是迄今为止的最新版本 我正在开发一个项目 在该项目中我将使用某人给我的 PHP 5 2 脚本 即使我使用 PHP 5 3 它们也能正常运行吗 PHP net 的特点是guide http p
  • 如何转义 xsl:param 中的分号?

    我正在 Visual Studio 中编写 XSL 转换 据报告 下面的分号是一个 意外的标记
  • 当 props 改变时,以下策略中哪一个是重置组件状态的最佳方法

    我有一个非常简单的组件 带有文本字段和按钮 它接受一个列表作为输入 并允许用户循环浏览该列表 该组件有以下代码 import as React from react import Button from material ui core i
  • 如何在传递给命令行参数时转义 Bash 中的变量

    我有一个 Bash 脚本 Cygwin 它使用一些带有空格的 Windows 路径 因此 我逃离了这个空间 在我的变量定义中 脚本中的所有内容都运行良好 但是 我需要将此变量作为参数传递给命令行可执行文件 当我这样做时 我的逃跑就会变得一团
  • SED 或 AWK 将所有内容替换为另一个文件中的模式

    我正在尝试使用 SED 脚本进行模式替换 但它无法正常工作 样本内容 txt 288Y2RZDBPX1000000001dhana JP2F64EI1000000002d EU9V3IXI1000000003dfg1000000001dfd
  • 使用 NSArrayController 过滤单列 NSTableView

    我展示了一张带有NSTableView 一栏 一个NSSearchField and an NSButton 添加 我想要的是将表视图的内容设置为字符串列表 该字符串列表位于NSArray called list 应根据搜索字段的内容过滤此
  • 如何在 Google Ads api 中设置请求标头

    我想为我的经理帐户下的广告帐户提出预算 我有以下 YAML 文件 developer token 13245 login customer id 1324567891 customer id 1324567891 user agent 13
  • 为 v-html 添加 CSS 样式

    我想在 HTML 代码中添加样式v html 我尝试了几种解决方案 但没有任何功能 这是我的代码 模板 div class para div 脚本 export default data return value h2 TITLE h2 p
  • Android模拟器平台4.0启动问题

    我刚刚迁移到冰淇淋三明治模拟器 4 0 启动它时遇到很多困难 有时我收到数据库连接存在错误 并且无法启动 然后出现线程 52 违规之类的情况 现在模拟器已加载 但当我尝试解锁它时 我收到一些策略违规错误 然后它冻结了 我真的很沮丧 其他人也
  • UISearchBar - ReturnKeyType 不适用于 iOS 8

    我在用UISearchbar在故事板的表视图控制器中 和搜索栏returnKeyType is UIReturnKeySearch 它在 iOS7 上运行良好 但是returnKeyType不适用于 iOS8 在iOS8中 键盘上每次都会出
  • 无法使用 junit 测试异常

    我有一个包含 try catch 块的方法 但我不知道如何使我的测试通过 这是我的代码 public class ClassToTest public void loadFileContent try InputStream fileStr
  • 在 IIS7 中使用 WAS 时,global.asax Application_Start 等效项是什么

    我想对当前托管在 IIS7 中的 WCF 应用程序使用 netTcpBinding 这意味着将其配置为使用 WAS 这相当简单 但是 我的应用程序之前使用了 global asax 文件中的 Application Start 事件 我不需
  • 使用嵌套数组过滤对象数组

    所以我试图在对象数组上设置嵌套过滤器 问题是过滤器应用在对象内部的另一个对象数组的键上 这是代码 const items name 123 id 1 value true arr id 1 name 456 id 2 value false
  • iOS 7 错误警告:在演示或关闭正在进行时尝试从视图控制器 关闭

    我在 iOS 7 中遇到了 iOS 6 中未出现的问题 我有一个导航控制器 它显示另一个导航控制器来添加员工 第二个控制器以模态方式呈现 当我使用 取消 或 完成 按钮关闭第二个控制器时 出现错误 这是错误 QuickSchedule 88
  • 检查 LocalDateTime 是否在时间范围内

    我的时间 A 应该在时间 B 的 90 分钟范围内 之前和之后 示例 时间为 4 00 pm 时间 A 应介于 2 30 pm 90 到 5 30 pm 90 之间 尝试了以下方法 if timeA isAfter timeB minusM