下面列出了java.time.LocalDate#lengthOfYear ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Optional<TimeNode> generateDayCandidatesUsingDoY(final ZonedDateTime reference) {
final int year = reference.getYear();
final int month = reference.getMonthValue();
final LocalDate date = LocalDate.of(year, 1, 1);
final int lengthOfYear = date.lengthOfYear();
final List<Integer> candidates = createDayOfYearValueGeneratorInstance(daysOfYearCronField, year).generateCandidates(1, lengthOfYear);
final int low = LocalDate.of(year, month, 1).getDayOfYear();
final int high = month == 12
? LocalDate.of(year, 12, 31).getDayOfYear() + 1
: LocalDate.of(year, month + 1, 1).getDayOfYear();
final List<Integer> collectedCandidates = candidates.stream().filter(dayOfYear -> dayOfYear >= low && dayOfYear < high)
.map(dayOfYear -> LocalDate.ofYearDay(reference.getYear(), dayOfYear).getDayOfMonth())
.collect(Collectors.toList());
return Optional.of(collectedCandidates).filter(not(List::isEmpty)).map(TimeNode::new);
}
@ParameterizedTest
@MethodSource("data_nzwe")
public void test_nzwe(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(NZWE.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
/**
* Returns the number of days between two dates.
* <p>
* Faster than the JDK method.
*
* @param firstDate the first date
* @param secondDate the second date, after the first
* @return the new date
*/
static long daysBetween(LocalDate firstDate, LocalDate secondDate) {
int firstYear = firstDate.getYear();
int secondYear = secondDate.getYear();
if (firstYear == secondYear) {
return doy(secondDate) - doy(firstDate);
}
if ((firstYear + 1) == secondYear) {
return (firstDate.lengthOfYear() - doy(firstDate)) + doy(secondDate);
}
return secondDate.toEpochDay() - firstDate.toEpochDay();
}
@ParameterizedTest
@MethodSource("data_gblo")
public void test_gblo(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(GBLO.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_frpa")
public void test_frpa(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(FRPA.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_noos")
public void test_noos(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(NOOS.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_chzu")
public void test_chzu(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(CHZU.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_euta")
public void test_euta(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(EUTA.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_usgs")
public void test_usgs(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(USGS.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_usny")
public void test_usny(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(USNY.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@Override
public double getDaycountFraction(final LocalDate startDate, final LocalDate endDate) {
if(startDate.isAfter(endDate)) {
return -getDaycountFraction(endDate,startDate);
}
/*
* Number of whole years between start and end, excluding start's year and excluding end's year.
*
* If start and end fall in the same year, this is -1 (there will be a double counting of 1 year below if start < end).
* If start and end fall in separate but consecutive years, this is 0 (for start and end the fractional parts are counted individually below).
*/
double daycountFraction = endDate.getYear() - startDate.getYear() - 1.0;
/*
* Fraction from start to the end of start's year
*/
LocalDate startDateNextYear = LocalDate.of(startDate.getYear()+1,Month.JANUARY,1);
if(isCountLastDayNotFirst) {
startDateNextYear = startDateNextYear.minusDays(1);
}
daycountFraction += getDaycount(startDate, startDateNextYear) / startDate.lengthOfYear();
/*
* Fraction from beginning of end's year to end
*/
LocalDate endDateStartYear = LocalDate.of(endDate.getYear(), Month.JANUARY, 1);
if (isCountLastDayNotFirst) {
endDateStartYear = endDateStartYear.minusDays(1);
}
daycountFraction += getDaycount(endDateStartYear, endDate) / endDate.lengthOfYear();
return Math.max(daycountFraction,0.0);
}
@ParameterizedTest
@MethodSource("data_nyse")
public void test_nyse(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(NYSE.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_nzau")
public void test_nzau(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(NZAU.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_ausy")
public void test_ausy(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(AUSY.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_brbd")
public void test_brbd(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(BRBD.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_camo")
public void test_camo(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(CAMO.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@Override
public double getDaycountFraction(final LocalDate startDate, final LocalDate endDate) {
if(startDate.isAfter(endDate)) {
return -getDaycountFraction(endDate,startDate);
}
/*
* Number of whole years between start and end, excluding start's year and excluding end's year.
*
* If start and end fall in the same year, this is -1 (there will be a double counting of 1 year below if start < end).
* If start and end fall in separate but consecutive years, this is 0 (for start and end the fractional parts are counted individually below).
*/
double daycountFraction = endDate.getYear() - startDate.getYear() - 1.0;
/*
* Fraction from start to the end of start's year
*/
LocalDate startDateNextYear = LocalDate.of(startDate.getYear()+1,Month.JANUARY,1);
if(isCountLastDayNotFirst) {
startDateNextYear = startDateNextYear.minusDays(1);
}
daycountFraction += getDaycount(startDate, startDateNextYear) / startDate.lengthOfYear();
/*
* Fraction from beginning of end's year to end
*/
LocalDate endDateStartYear = LocalDate.of(endDate.getYear(), Month.JANUARY, 1);
if (isCountLastDayNotFirst) {
endDateStartYear = endDateStartYear.minusDays(1);
}
daycountFraction += getDaycount(endDateStartYear, endDate) / endDate.lengthOfYear();
return Math.max(daycountFraction,0.0);
}
@ParameterizedTest
@MethodSource("data_czpr")
public void test_czpr(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(CZPR.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_dkco")
public void test_dkco(int year, List<LocalDate> holidays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY;
assertThat(DKCO.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}
@ParameterizedTest
@MethodSource("data_hubu")
public void test_hubu(int year, List<LocalDate> holidays, List<LocalDate> workDays) {
LocalDate date = LocalDate.of(year, 1, 1);
int len = date.lengthOfYear();
for (int i = 0; i < len; i++) {
boolean isHoliday = (holidays.contains(date) || date.getDayOfWeek() == SATURDAY || date.getDayOfWeek() == SUNDAY) &&
!workDays.contains(date);
assertThat(HUBU.isHoliday(date)).as(date.toString()).isEqualTo(isHoliday);
date = date.plusDays(1);
}
}