java - Java 中的日期间隔加法和减法

标签 java date sum intervals subtraction

我正在寻找 Java 中的库或辅助类,它们可以让我执行日期间隔的加法和减法。

例如,假设我有以下日期间隔:

A = ["2015-01-01 00:00", "2015-01-20 00:00"]
B = ["2015-01-05 00:00", "2015-01-10 00:00"]
C = ["2015-01-11 00:00", "2015-01-14 00:00"]
D = ["2015-01-19 00:00", "2015-01-25 00:00"]

1                  A               20
|----------------------------------|
    |---------|   |----------|   |------------|
    5    B    10  11    C    14  19    D      25

假设我想计算以下内容:

A - B - C + D = { ["2015-01-01 00:00", "2015-01-05 00:00"[,
                  ]"2015-01-10 00:00", "2015-01-11 00:00"[,
                  ]"2015-01-14 00:00", "2015-01-25 00:00"] }

1   5         10  11         14               25
|---|         |---|          |----------------|

我知道我可以使用纯 Java 构建我自己的逻辑,但我不想重新发明轮子...

我正在调查 Joda-Time ,但我不知道如何使用它执行此类操作。

非常感谢!

最佳答案

我找到了我需要的东西:Ranges , 来自 guava-libraries .

像这样工作:

Range<Date> a = Range.closed(
    new GregorianCalendar(2015, 0, 1).getTime(),
    new GregorianCalendar(2015, 0, 20).getTime());
Range<Date> b = Range.closed(
    new GregorianCalendar(2015, 0, 5).getTime(),
    new GregorianCalendar(2015, 0, 10).getTime());
Range<Date> c = Range.closed(
    new GregorianCalendar(2015, 0, 11).getTime(),
    new GregorianCalendar(2015, 0, 14).getTime());
Range<Date> d = Range.closed(
    new GregorianCalendar(2015, 0, 19).getTime(),
    new GregorianCalendar(2015, 0, 25).getTime());

RangeSet<Date> result = TreeRangeSet.create();
result.add(a);
result.remove(b);
result.remove(c);
result.add(d);

System.out.println(result);

上面的代码打印:

[
    [Thu Jan 01 00:00:00 BRST 2015‥Mon Jan 05 00:00:00 BRST 2015),
    (Sat Jan 10 00:00:00 BRST 2015‥Sun Jan 11 00:00:00 BRST 2015),
    (Wed Jan 14 00:00:00 BRST 2015‥Sun Jan 25 00:00:00 BRST 2015]
]

关于java - Java 中的日期间隔加法和减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28141773/

相关文章:

java - 编写基于文本的游戏,我对如何在按下按钮时检查输入然后更新感到困惑

javascript - 带 for 循环的日期数组

返回因子变量第一次和最后一次出现的日期

python - 在 Pandas 中添加日期

SQL查询汇总不同表中的字段

java - 使用字符串替换删除标点符号在 Java 中不起作用

java - Gson for Maven - 无法确定配置文件的 Java 版本

java - Netty:永远不会调用 ChannelRead0

python - 需要输出掷 2 个骰子的前 3 个结果,这两个骰子的面数是可变的

mysql - 如何在MySQL中进行SUM聚合并将其作为总计放入新列中?