Java 是否有包含/排除时间间隔结束的标准?
我想知道是否有一种标准或“正常”的方法来解释时间间隔数据终点,即定义终点的值的包容性/排他性。但是请注意,我问的是标准(或最常见的)惯例是什么(如果有),而不是关于你个人偏好的论文。如果你真的想提供一篇论文,请将其附在某人发表的标准参考或关于该问题的标准文本上。开放标准(我无需付费阅读)是首选标准,除非它们存在根本缺陷:) 当然,从a到B的时间间隔有4种可能:Java 是否有包含/排除时间间隔结束的标准?,java,date,time,conventions,Java,Date,Time,Conventions,我想知道是否有一种标准或“正常”的方法来解释时间间隔数据终点,即定义终点的值的包容性/排他性。但是请注意,我问的是标准(或最常见的)惯例是什么(如果有),而不是关于你个人偏好的论文。如果你真的想提供一篇论文,请将其附在某人发表的标准参考或关于该问题的标准文本上。开放标准(我无需付费阅读)是首选标准,除非它们存在根本缺陷:) 当然,从a到B的时间间隔有4种可能: (A,B)-两端都是排他性的 [A,B]-两端都包括在内 [A,B)-开始是包含的,结束是独占的 (A,B)-开始是独占的,结束是包含的
最后,我将在Java中工作,因此我特别容易接受在Java中工作良好的答案。我不能肯定,但我怀疑是否存在标准或约定。你是否包括开始或结束时刻取决于你的用例,所以考虑它们是否对你很重要。如果决定是任意的,选择一个,注意选择是任意的,然后继续
至于Java支持的内容,Joda时间库实现了包括开始时间但不包括结束时间的s我将使用Voo的链接为我们的团队提供我所写的答案,直到Voo添加答案,然后我将给他评分。以下是我为我们的案例所做的决定: 应用程序中的时间间隔将表示为一对 瞬时时间与约定的开始时间相同 包含,并且结束时间是独占的。这个公约是 数学上很方便,因为边界的差异是 等于间隔的长度,并且在数值上也是 与java中数组和列表的订阅方式一致 计划(见)。这个 实际结果是,间隔2012-03-17T00:00:00.000Z—— 2012-03-18T00:00:00.000Z表示整个圣帕特里克节, 从2012年3月17日开始的每个日期将被确定为 包括在圣帕特里克节,但2012-03-18T00:00:00.000Z不包括在内 包括在内,圣帕特里克节将包括24*60*60*1000 毫秒
在一般情况下,
[A,B)
(包含开始,独占结束)有很多优点,我看不出任何理由说明时间间隔的情况不一样
Djikstra写了一篇关于它的好文章,尽管它的名字很好,但主要是关于这一点
优点的简短总结:
等于列表中的项目数end-start
- 上一个区间的上界是下一个区间的下界
- 允许对从0开始的具有无符号数字[1]的间隔进行索引
[1] 这是与
(A,B)相比的优势
-从0开始的间隔比以MAX\u VAL
结束的间隔更常见。注意,这还涉及到一个额外的问题:使用两个包含的边界意味着我们可以表示一个长度不能用相同大小表示的序列。尽管这个线程更关注Java,但我认为它会非常有趣ng希望看到其他采用的约定,特别是考虑到pandas
Python在当今的数据分析中无处不在,而且这个StackOverflow页面是查找时间范围的包容性/排他性约定时最热门的搜索结果之一
引述:
开始日期和结束日期严格包括在内。因此,如果指定,它将不会生成这些日期之外的任何日期
此外,它不仅生成日期范围。在尝试索引到时间序列数据时也采用了该约定。下面是一个使用DatetimeIndex
>>> import pandas as pd
>>> pd.__version__
'0.20.2'
>>> df = pd.DataFrame(list(range(20)))
>>> df.index = pd.date_range(start="2017-07-01", periods=20)
>>> df["2017-07-01":"2017-07-05"]
0
2017-07-01 0
2017-07-02 1
2017-07-03 2
2017-07-04 3
2017-07-05 4
java.time&Half-Open
取代麻烦的遗留日期时间类的类以及Joda时间项目使用半开放方法[)定义了一个时间跨度,其中开始是包含的,而结束是独占的
>>> import pandas as pd
>>> pd.__version__
'0.20.2'
>>> df = pd.DataFrame(list(range(20)))
>>> df.index = pd.date_range(start="2017-07-01", periods=20)
>>> df["2017-07-01":"2017-07-05"]
0
2017-07-01 0
2017-07-02 1
2017-07-03 2
2017-07-04 3
2017-07-05 4