/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = 1; if (++m0 > 12) { m0 = 1; ++y0; } } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = last; } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
private Comparable extract(RexCall call, List<Comparable> values) { final Comparable v = values.get(1); if (v == N) { return N; } final TimeUnitRange timeUnitRange = (TimeUnitRange) values.get(0); final int v2; if (v instanceof Long) { // TIMESTAMP v2 = (int) (((Long) v) / TimeUnit.DAY.multiplier.longValue()); } else { // DATE v2 = (Integer) v; } return DateTimeUtils.unixDateExtract(timeUnitRange, v2); }
private Comparable extract(RexCall call, List<Comparable> values) { final Comparable v = values.get(1); if (v == N) { return N; } final TimeUnitRange timeUnitRange = (TimeUnitRange) values.get(0); final int v2; if (v instanceof Long) { // TIMESTAMP v2 = (int) (((Long) v) / TimeUnit.DAY.multiplier.longValue()); } else { // DATE v2 = (Integer) v; } return DateTimeUtils.unixDateExtract(timeUnitRange, v2); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = last; } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = 1; if (++m0 > 12) { m0 = 1; ++y0; } } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = 1; if (++m0 > 12) { m0 = 1; ++y0; } } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = 1; if (++m0 > 12) { m0 = 1; ++y0; } } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = m / 12; y0 += y; m0 += m - y * 12; int last = lastDay(y0, m0); if (d0 > last) { d0 = 1; if (++m0 > 12) { m0 = 1; ++y0; } } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
/** Adds a given number of months to a date, represented as the number of * days since the epoch. */ //override public static int addMonths(int date, int m) { int y0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.YEAR, date); int m0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.MONTH, date); int d0 = (int) DateTimeUtils.unixDateExtract(TimeUnitRange.DAY, date); int y = (m + m0) / 12; y0 += y; m0 = m + m0 - y * 12; if (m0 <= 0) { m0 += 12; assert m0 > 0; y0--; } int last = lastDay(y0, m0); if (d0 > last) { d0 = last; } return DateTimeUtils.ymdToUnixDate(y0, m0, d0); }
private void thereAndBack(int year, int month, int day) { final int unixDate = ymdToUnixDate(year, month, day); assertThat(unixDateExtract(TimeUnitRange.YEAR, unixDate), is((long) year)); assertThat(unixDateExtract(TimeUnitRange.MONTH, unixDate), is((long) month)); assertThat(unixDateExtract(TimeUnitRange.DAY, unixDate), is((long) day)); final long isoYear = unixDateExtract(TimeUnitRange.ISOYEAR, unixDate); assertTrue(isoYear >= year - 1 && isoYear <= year + 1); final long w = unixDateExtract(TimeUnitRange.WEEK, unixDate); assertTrue(w >= 1 && w <= 53); final long dow = unixDateExtract(TimeUnitRange.DOW, unixDate); assertTrue(dow >= 1 && dow <= 7); final long iso_dow = unixDateExtract(TimeUnitRange.ISODOW, unixDate); assertTrue(iso_dow >= 1 && iso_dow <= 7); final long doy = unixDateExtract(TimeUnitRange.DOY, unixDate); assertTrue(doy >= 1 && doy <= 366); final long q = unixDateExtract(TimeUnitRange.QUARTER, unixDate); assertTrue(q >= 1 && q <= 4); final long d = unixDateExtract(TimeUnitRange.DECADE, unixDate); assertTrue(d == year / 10); final long c = unixDateExtract(TimeUnitRange.CENTURY, unixDate); assertTrue(c == (year > 0 ? (year + 99) / 100 : (year - 99) / 100)); final long m = unixDateExtract(TimeUnitRange.MILLENNIUM, unixDate); assertTrue(m == (year > 0 ? (year + 999) / 1000 : (year - 999) / 1000)); }
private void thereAndBack(int year, int month, int day) { final int unixDate = ymdToUnixDate(year, month, day); assertThat(unixDateExtract(TimeUnitRange.YEAR, unixDate), is((long) year)); assertThat(unixDateExtract(TimeUnitRange.MONTH, unixDate), is((long) month)); assertThat(unixDateExtract(TimeUnitRange.DAY, unixDate), is((long) day)); final long isoYear = unixDateExtract(TimeUnitRange.ISOYEAR, unixDate); assertTrue(isoYear >= year - 1 && isoYear <= year + 1); final long w = unixDateExtract(TimeUnitRange.WEEK, unixDate); assertTrue(w >= 1 && w <= 53); final long dow = unixDateExtract(TimeUnitRange.DOW, unixDate); assertTrue(dow >= 1 && dow <= 7); final long iso_dow = unixDateExtract(TimeUnitRange.ISODOW, unixDate); assertTrue(iso_dow >= 1 && iso_dow <= 7); final long doy = unixDateExtract(TimeUnitRange.DOY, unixDate); assertTrue(doy >= 1 && doy <= 366); final long q = unixDateExtract(TimeUnitRange.QUARTER, unixDate); assertTrue(q >= 1 && q <= 4); final long d = unixDateExtract(TimeUnitRange.DECADE, unixDate); assertTrue(d == year / 10); final long c = unixDateExtract(TimeUnitRange.CENTURY, unixDate); assertTrue(c == (year > 0 ? (year + 99) / 100 : (year - 99) / 100)); final long m = unixDateExtract(TimeUnitRange.MILLENNIUM, unixDate); assertTrue(m == (year > 0 ? (year + 999) / 1000 : (year - 999) / 1000)); }