Java 本地日期间隔(以Joda时间为单位)

Java 本地日期间隔(以Joda时间为单位),java,jodatime,Java,Jodatime,Joda time有一个类,它的范围在s和s之间。什么可以用于一系列的s 我想要一个对象表示,例如“从2011年1月1日到2011年10月1日”,没有时间(或时区)进入图片 据我所知,《乔达时代》并没有为此做任何准备。 如果它不存在任何东西,我们会创建它,它应该是什么样子?最重要的是,它可以实现来自joda time的哪些接口以最好地集成到其他类型中,从而与joda time设计保持一致? 它实现ReadableInterval,其中getStart和getEnd返回DateMidnight,是

Joda time有一个类,它的范围在s和s之间。什么可以用于一系列的s

我想要一个对象表示,例如“从2011年1月1日到2011年10月1日”,没有时间(或时区)进入图片

据我所知,《乔达时代》并没有为此做任何准备。 如果它不存在任何东西,我们会创建它,它应该是什么样子?最重要的是,它可以实现来自joda time的哪些接口以最好地集成到其他类型中,从而与joda time设计保持一致?
它实现
ReadableInterval
,其中
getStart
getEnd
返回
DateMidnight
,是否有意义?

编辑:哎哟,之前读错了

不,据我所知,在乔达的时间里没有任何等价物

就个人而言,我只需要创建自己的类,其中包括开始和结束日期:
LocalDateInterval
或类似的内容。我不会重复使用
Interval
,因为这会混淆概念:一对
LocalDate
值并不代表两个瞬间,因为一个本地日期实际上不是瞬间

就我个人而言,我不认为
Interval
在Joda时代特别有用。。。我一直在考虑把它从野田佳彦身上移除。现在听起来我不应该;)

该类表示从一毫秒到另一毫秒的时间间隔(包括时区)。就是这么一瞬间。因此,您提议的DateMiddings间隔的实现已经准备就绪

Interval i = new Interval(
    new DateMidnight(2010, 3, 2), new DateMidnight(2010, 3, 5));

i.contains(new DateTime(2010, 3, 1, 23, 59, 59, 999)); // == false
i.contains(new DateTime(2010, 3, 2, 0, 0, 0, 0)); // == true
i.contains(new DateTime(2010, 3, 4, 23, 59, 59, 999)); // == true
i.contains(new DateTime(2010, 3, 5, 0, 0, 0, 0)); // == false

但是,部分(无时区)搜索间隔的概念尚不存在。如果您打算自己实现它,那么根本不要实现任何间隔接口。它会干扰您的意愿,因为如前所述,它是基于瞬间的。

请注意,在DST开关处使用
DateMidnight
将失败。最好使用
date.toDateTimeAtStartOfDay()

转换,我也需要LocalDate对象的间隔,但JodaTime不支持。 所以我必须创建自己的实现。后来,我决定对它稍加润色,使之成为开源软件

您可以查看:(在Maven Central上提供)。

我个人使用Guava的类

它支持开放式范围。也可以指定包含或排除的边界。在众多的可能性中,这些可以很容易地表示“日期之前”或“日期之后”

开放式间隔的示例

Range<LocalDate> before2010 = Range.atMost(new LocalDate("2009-12-31"));
Range<LocalDate> alsoBefore2010 = Range.lessThan(new LocalDate("2010-01-01"));
Range before2010=Range.atMost(新的LocalDate(“2009-12-31”);
Range alsoBefore2010=Range.lessThan(新的本地日期(“2010-01-01”);
它还提供了简单的测试谓词,比如contains和containsAll,以及一个交集操作。所有这些都经过测试和维护

public class LocalDateInterval {

   private LocalDate begin;
   private LocalDate end;

   public LocalDateInterval(LocalDate begin, LocalDate end) {
     this.begin = begin;
     this.end = end;
   }



}

这对我有用

但我需要的不是持续时间,而是一个特定的时间间隔。例如:从2011年1月1日到2012年1月10日。我将编辑问题以澄清,对不起,我现在和你在一起。野田佳彦几点了?那是Jon Skeet的个人约会时间库吗?你不应该移除它。至少interval类的java版本通常是used@Olivier:真的吗?我个人没有用过它,我也看不出它非常有用。。。我想这取决于你的用例。你能给出一个具体的例子说明它在哪里会失败吗?与午夜相关的类和方法在Joda Time 2.3中被方法
替换为方法