@Override public int getInt(PlainDate context) { switch (this.index) { case IntegerDateElement.YEAR: return context.year; case IntegerDateElement.MONTH: return context.month; case IntegerDateElement.DAY_OF_MONTH: return context.dayOfMonth; case IntegerDateElement.DAY_OF_YEAR: return context.getDayOfYear(); case IntegerDateElement.DAY_OF_QUARTER: return context.getDayOfQuarter(); case WIM_INDEX: return ((context.dayOfMonth - 1) / 7) + 1; default: throw new UnsupportedOperationException(this.name); } }
private PlainDate withDayOfYear(int dayOfYear) { if (this.getDayOfYear() == dayOfYear) { return this; } return PlainDate.of(this.year, dayOfYear); }
private static long dayDelta( PlainDate start, PlainDate end ) { if (start.getYear() == end.getYear()) { return end.getDayOfYear() - start.getDayOfYear(); } return end.getDaysSinceUTC() - start.getDaysSinceUTC(); }
@Override public int getInt(T context) { PlainDate date = context.get(CALENDAR_DATE); int year = date.getYear(); int dayOfYear = date.getDayOfYear(); int wCurrent = getFirstCalendarWeekAsDayOfYear(date, 0); if (wCurrent <= dayOfYear) { if ( (((dayOfYear - wCurrent) / 7) + 1 >= 53) && (getFirstCalendarWeekAsDayOfYear(date, 1) + getLengthOfYear(date, 0) <= dayOfYear) ) { year++; } } else { year--; } return year; }
PlainDate max = date.with(dow, context.getMaximum(dow)); if (this.owner.isYearRelated()) { if (max.getDayOfYear() < date.getDayOfYear()) { return PlainDate.DAY_OF_YEAR; PlainDate min = date.with(dow, context.getMinimum(dow)); if (this.owner.isYearRelated()) { if (min.getDayOfYear() > date.getDayOfYear()) { return PlainDate.DAY_OF_YEAR;
private static int getWeekOfYear(PlainDate date) { int dayOfYear = date.getDayOfYear(); int wCurrent = getFirstCalendarWeekAsDayOfYear(date, 0); if (wCurrent <= dayOfYear) { int result = ((dayOfYear - wCurrent) / 7) + 1; if (result >= 53) { // Optimierung int wNext = getFirstCalendarWeekAsDayOfYear(date, 1) + getLengthOfYear(date, 0); if (wNext <= dayOfYear) { result = 1; } } return result; } else { int wPrevious = getFirstCalendarWeekAsDayOfYear(date, -1); int dayCurrent = dayOfYear + getLengthOfYear(date, -1); return ((dayCurrent - wPrevious) / 7) + 1; } }
? date.getDayOfYear() : date.getDayOfMonth()); Weekday wd = getDayOfWeek(date.getDaysSinceUTC() - scaledDay + 1);
private int getCalendarWeek(PlainDate date) { int scaledDay = ( this.owner.isYearRelated() ? date.getDayOfYear() : date.getDayOfMonth()); int wCurrent = getFirstCalendarWeekAsDay(date, 0); if (wCurrent <= scaledDay) { int result = ((scaledDay - wCurrent) / 7) + 1; if ( (result >= 53) || (!this.owner.isYearRelated() && (result >= 5)) ) { int wNext = getFirstCalendarWeekAsDay(date, 1) + getLengthOfYM(date, 0); if (wNext <= scaledDay) { result = 1; } } return result; } else { int wPrevious = getFirstCalendarWeekAsDay(date, -1); int dayCurrent = scaledDay + getLengthOfYM(date, -1); return ((dayCurrent - wPrevious) / 7) + 1; } }
private int getMaxCalendarWeek(PlainDate date) { int scaledDay = ( this.owner.isYearRelated() ? date.getDayOfYear() : date.getDayOfMonth()); int wCurrent = getFirstCalendarWeekAsDay(date, 0); if (wCurrent <= scaledDay) { int wNext = getFirstCalendarWeekAsDay(date, 1) + getLengthOfYM(date, 0); if (wNext <= scaledDay) { // reference date points to next week cycle try { int wStart = getFirstCalendarWeekAsDay(date, 1); wNext = getFirstCalendarWeekAsDay(date, 2) + getLengthOfYM(date, 1); wCurrent = wStart; } catch (RuntimeException re) { wNext += 7; // theoretical rare edge case near the end of time axis } } return (wNext - wCurrent) / 7; } else { int wPrevious = getFirstCalendarWeekAsDay(date, -1); wCurrent = wCurrent + getLengthOfYM(date, -1); return (wCurrent - wPrevious) / 7; } }
private static PlainDate addDays( PlainDate date, long amount ) { long dom = MathUtils.safeAdd(date.dayOfMonth, amount); Weekday weekday = null; boolean hasDOW = (date.weekday != null); if (hasDOW) { if (amount == 1) { weekday = date.weekday.next(); } else if (amount == 7) { weekday = date.weekday; } } if ((dom >= 1) && (dom <= 28)) { if (hasDOW && (weekday == null)) { weekday = date.weekday.roll((int) amount); } return PlainDate.create(date.year, date.month, (int) dom, weekday, false); } long doy = MathUtils.safeAdd(date.getDayOfYear(), amount); if ((doy >= 1) && (doy <= 365)) { if (hasDOW && (weekday == null)) { weekday = date.weekday.roll((int) amount); } return PlainDate.ofYearDay(date.year, (int) doy, weekday); } return TRANSFORMER.transform(MathUtils.safeAdd(date.getDaysSinceUTC(), amount)); }