@Override public double read(FieldValue value) { if(value instanceof YearValue) { return ((YearValue) value).getYear(); } return Double.NaN; } });
@Override public PeriodValue next() { return new YearValue(year + 1); }
/** * * @return an integer between 1 and 366 indicating which day of this year this date * falls. */ public int getDayOfYear() { int day = CUM_DAYS_IN_MONTH[monthOfYear - 1]; if(monthOfYear > 2 && YearValue.isLeapYear(year)) { day++; } return day + dayOfMonth; }
@Override public BlockManager visitYear(YearType yearType) { return new NumberBlock(fieldName, (IntReader) value -> ((YearValue) value).getYear()); }
@Override public PeriodValue previous() { return new YearValue(year - 1); }
public static int getLastDayOfMonth(int year, int month) { if(month == 2) { return YearValue.isLeapYear(year) ? 29 : 28; } else { return DAYS_IN_MONTH[month - 1]; } }
@Override public PeriodValue parseString(String string) { return new YearValue(Integer.parseInt(string)); }
public static int daysBetween(LocalDate x, LocalDate y) { assert !x.after(y); int days = -x.getDayOfYear(); int year = x.getYear(); while(year < y.getYear()) { if(YearValue.isLeapYear(year)) { days += 366; } else { days += 365; } year++; } return days + y.getDayOfYear(); }
@Override public PeriodValue containingDate(LocalDate localDate) { return new YearValue(localDate.getYear()); } }
@Override public FieldValue parseJsonValue(JsonValue value) { return new YearValue(value.asInt()); }
@Override public PeriodValue fromSubFormKey(RecordRef ref) { String subRecordId = ref.getRecordId().asString(); String yearKey = subRecordId.substring(subRecordId.length() - 4); return new YearValue(Integer.parseInt(yearKey)); }