繁体   English   中英

在 Java 中用时间执行 A - B (A\\B)?

[英]Perform A - B (A\B) with Time in java?

如果我有这个代码:

DateTime start = new DateTime().withTime(4, 0, 0, 0);
DateTime end = start.withTime(5, 0, 0, 0);

DateTime s2 = start.withTime(4,30,0,0);
DateTime e2 = start.withTime(5,30,0,0);

Duration d1 = new Duration(start,end);
Duration d2 = new Duration(s2,e2);

Duration result = d1.minus(d2);
System.out.println((int)result.getStandardMinutes());

有没有办法基本上可以得到 A - B 或 A \\ B (集合理论符号)? 在这种情况下,结果将是 30,因为第一个持续时间有 30 分钟,而第二个持续时间没有发生。

我不是专门在 Jodatime 中寻找解决方案,只是用它来解释问题。

Duration表示时间量(例如"10 分 30 秒" ),但它没有附加到时间线:10 分 30 秒相对于什么? 没什么特别的,这只是时间(值)本身。

特别是在 Joda-Time 中,在创建Duration ,对象本身不存储用于计算它的参考日期,因此Duration实例无法知道它是在特定日期之前还是之后(因为它是一段不附加到任何特定日期,因此您无法将其与日期进行比较)。

如果要考虑特定日期(在另一个日期之后或之前),并使用此日期来计算持续时间,则必须计算持续时间之前检查日期:

// ignore dates before the start
DateTime date1 = s2.isBefore(start) ? start : s2;

// ignore dates after the end
DateTime date2 = e2.isAfter(end) ? end : e2;

Duration d2 = new Duration(date1, date2);

或者,你可以做你已经在做的事情,但最后,你检查s2e2是否在开始/结束间隔之外,并将各自的持续时间添加回结果:

if (s2.isBefore(start)) {
    result = result.plus(new Duration(s2, start));
}
if (e2.isAfter(end)) {
    result = result.plus(new Duration(end, e2));
}

不确定集合论是否真的适用于此,但我可能是错的(我不是数学专业人士)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM