java - 在java中查找多个日期间隔之间的差异
问题描述
我想从给定的间隔集 B、C 和 D 中减去主间隔 A,以获得完全不重叠的日期间隔的输出。B、C 和 D 间隔可以是几年或几个月。但是 A 将只有 90 天。
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 9 11 C 14 19 D 25
理想的输出:{1,2,3,4,10,15,16,17,18}
1 4 10 15 18
|---| | |------|
到目前为止我做了什么?
I have iterated all the entries from A(1-20) in a list and all other entries B,C and D in another list and find out A-(B+C+D).
This is surely the longest way because the duration can be of several years.
请建议最快的方法来做到这一点。
解决方案
我的库Time4J根据您的期望 A - (B + C + D)提供对间隔减法的直接支持。
ChronoFormatter<PlainTimestamp> parser =
ChronoFormatter.ofTimestampPattern("uuuu-MM-dd HH:mm", PatternType.CLDR, Locale.ROOT);
// my assumption for your input, please adjust the interval pattern if necessary
String intervalPattern = "{0} / {1}";
String sa = "2015-01-01 00:00 / 2015-01-20 00:00";
String sb = "2015-01-05 00:00 / 2015-01-10 00:00";
String sc = "2015-01-11 00:00 / 2015-01-14 00:00";
String sd = "2015-01-19 00:00 / 2015-01-25 00:00";
TimestampInterval a = TimestampInterval.parse(sa, parser, intervalPattern);
TimestampInterval b = TimestampInterval.parse(sb, parser, intervalPattern);
TimestampInterval c = TimestampInterval.parse(sc, parser, intervalPattern);
TimestampInterval d = TimestampInterval.parse(sd, parser, intervalPattern);
IntervalCollection<PlainTimestamp> result =
IntervalCollection.onTimestampAxis().plus(a).minus(Arrays.asList(b, c, d));
生成的间隔集合包含所需的和预期的间隔(只需调用getIntervals()
结果并PlainTimestamp.toTemporalAccessor()
转换为LocalDateTime
)。默认情况下,这里的所有间隔都是半开的,这意味着开始是包含的,而结束是排他的。因此使用天数和封闭边界 char [ 和开放边界 char ):
[1-5), [10-11), [14-19)
这几乎符合您的期望“{1,2,3,4,10,15,16,17,18}”,除了 14 而不是 15(我认为这只是您问题中的一个错字)。
推荐阅读
- javascript - 没有 (.js) 文件扩展名的 ES6 模块导入不起作用
- postgresql - PostgreSQL 存储转发
- r - 从多变量 tsibble 中删除季节和趋势
- c - 如何以 1 秒的间隔在 C 中打印值?
- swift - Swift - WatchKit:如何将数据返回到根视图控制器?
- javascript - Gatsby 和 Netlify CMS 预览错误与渲染 StaticQuery
- java - Parse 服务器安全最佳实践
- apache - 更改域并将用户带到与新域相同的页面
- python - 与刮掉的大学橄榄球成绩的格式作斗争
- c# - 在不使用 List 的情况下如何在 C# 中执行此操作?