当省略年份时,FirstInterval 和 SecondInterval 之间的最大跨度为 12 个月。
样本使用的日/月组合允许假设所有日期都在同一年。这意味着FirstInterval 可能永远不会大于SecondInterval,否则期限的结束必须在下一年。
但在这种情况下,无法确定todayDate 是否适合该时期,因为它可能属于“本”年或“下”年(我们不知道哪个是正确的)。
因此,为了能够获得确定性的输出,我们必须假设所有三个日期都是同一年。
解决方案可能如下所示:
public final boolean isDateBetween( final String todayDate, final String firstInterval, final String secondInterval )
{
var formatter = DateTimeFormatter.ofPattern("dd/MM");
var lowerRange = MonthDay.parse( firstInterval, formatter );
var upperRange = MonthDay.parse( secondInterval, formatter );
if( !upperRange.isAfter( lowerRange ) ) throw new Error();
var testDate = MonthDay.parse( todayDate, formatter );
var retValue = !testDate.isBefore( lowerRange ) && !testDate.isAfter( upperRange );
return retValue;
}
当然,这里缺少正确的错误处理,需要添加。
但我们假设时间范围的含义类似于“一年中的季节”,我们想知道todayDate 是否在冬季。
这样的解决方案可能如下所示:
public final boolean isDayInSeason( final String today, final String begin, final String end )
{
boolean retValue = false;
var formatter = DateTimeFormatter.ofPattern("dd/MM");
var lowerRange = MonthDay.parse( begin, formatter );
var upperRange = MonthDay.parse( end, formatter );
if( !upperRange.isAfter( lowerRange ) )
{
retValue = isDayInSeason( today, lowerRange, "31/12" ) || isDayInSeason( today, "01/01", upperRange );
}
else
{
var testDate = MonthDay.parse( todayDate, formatter );
retValue = !testDate.isBefore( lowerRange ) && !testDate.isAfter( upperRange );
}
return retValue;
}