Hul*_*ulk 5 java date jodatime
我想从两个日期之间的完整日期的计算中排除2月29日.排除区间的角点值.
测试场景:
1 March 2012 - 28th February 2012 = should give 0 days.
1 March 2012 - 26th February 2012 = should give 2 days.
1 March 2013 - 28th February 2012 = should give 365 days and not 366 days.
1 March 2017 - 28th February 2012 = should give 365*5 =1825 days and not 1827 days.
Run Code Online (Sandbox Code Playgroud)
目前我解析年份并检查日期之间是否有任何闰年,然后检查时间间隔是否为2月29日.如果任何特定区间具有特定日期和出现次数(如果区间跨越多年),是否有任何方法可以确定.
下面的 Java 式伪代码应该可以工作。如果您愿意,它还允许您添加其他过滤器:
int daysExcludingLeapYearDay(Date start, Date end)
{
if(end.isBefore(start))
{
return filterOutLeapYearDays(daysBetween(end, start)).size();
}
return filterOutLeapYearDays(daysBetween(start, end)).size();
}
List<Date> filterOutLeapYearDays(List<Date> days)
{
List<Date> daysExcludingLeapYearDays =
days
.filter(d -> !isFeb29(d))
.toList());
return daysExcludingLeapYearDays;
}
List<Date> daysBetween(Date start, Date end)
{
List<Date> days = new List();
for (Date day = start; day.isBefore(end); day = day.plusOneDay())
{
days.add(day);
}
return days
}
boolean isFeb29(Date date)
{
return date.month == FEBRUARY && date.day == 29;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |