2016-07-29 24 views
0

是否可以制作一个类似于Joda Time's Interval类的范围对象,您可以在其中设置开始日期和结束日期值,但不包括年份?例如,如果日期在8月1日至12月1日的范围内,则无论年份如何,我都希望在自己的代码中执行某些操作。在没有这一年的乔达时间做一个日期范围?

+1

当然这是可能的。一旦你决定了API的外观,这应该相当容易。你有尝试过什么吗?你的问题到底是什么? –

+0

@JimGarrison是的我试过使用LocalDate类和Interval类,但他们需要一个年份参数。我将检查给定的当地日期是否在该范围内,但是如果设置了年份值,则可能无法使用,因为年份可能不同。 –

+0

@JimGarrison我在问乔达时代如何做到这一点。有没有一个班或一些功能可以让我在没有一年参与的情况下设置一个范围。我无法在SO或其文档中找到解决此问题的任何内容。 –

回答

2

Joda-Time提供MonthDay类型,该类型实现了ReadablePartial(请参阅部分时间的更多类型的实现类的列表)。您可以将其与Guava's Range类型结合使用来表示这种间隔的范围。

Joda-Time不包括一个强大的方法来处理部分范围;您的时间跨度选项是Period, Interval, and Duration。然而,我发现Range非常适合这样的任务。

+0

我刚刚测试过这个,当我测试一个不会重叠到新的一年的范围时,它就可以工作。然而,我需要能够测试从九月到一月底的范围,并且当我运行测试时它会在1月31日初始化时崩溃。像这样:'Range mRegSeason = Range.closed(new MonthDay(9,1),new MonthDay(1,31));'是否有解决方法或者我将不得不使用样板代码来解释这个问题? –

+0

是的,一月在九月之前。 'MonthDay'是一个有序的类型,仅表示几个月和几天。如果您想要纳入多年,则需要使用LocalDate或其他日期类型。 – dimo414

相关问题