/** * Convert a date value to a date, using the default timezone. * * @param dateValue the date value * @return the date */ public static Date convertDateValueToDate(long dateValue) { long millis = getMillis(TimeZone.getDefault(), yearFromDateValue(dateValue), monthFromDateValue(dateValue), dayFromDateValue(dateValue), 0, 0, 0, 0); return new Date(millis); }
/** * Convert a date value / time value to a timestamp, using the default * timezone. * * @param dateValue the date value * @param nanos the nanoseconds since midnight * @return the timestamp */ public static Timestamp convertDateValueToTimestamp(long dateValue, long nanos) { long millis = nanos / 1000000; nanos -= millis * 1000000; long s = millis / 1000; millis -= s * 1000; long m = s / 60; s -= m * 60; long h = m / 60; m -= h * 60; long ms = getMillis(TimeZone.getDefault(), yearFromDateValue(dateValue), monthFromDateValue(dateValue), dayFromDateValue(dateValue), (int) h, (int) m, (int) s, 0); Timestamp ts = new Timestamp(ms); ts.setNanos((int) (nanos + millis * 1000000)); return ts; }
/** * Convert the date to the specified time zone. * * @param value the date (might be ValueNull) * @param calendar the calendar * @return the date using the correct time zone */ public static Date convertDate(Value value, Calendar calendar) { if (value == ValueNull.INSTANCE) { return null; } ValueDate d = (ValueDate) value.convertTo(Value.DATE); Calendar cal = (Calendar) calendar.clone(); cal.clear(); cal.setLenient(true); long dateValue = d.getDateValue(); setCalendarFields(cal, yearFromDateValue(dateValue), monthFromDateValue(dateValue), dayFromDateValue(dateValue), 0, 0, 0, 0); long ms = cal.getTimeInMillis(); return new Date(ms); }
/** * Calculate the absolute day from a date value. * * @param dateValue the date value * @return the absolute day */ public static long absoluteDayFromDateValue(long dateValue) { long y = yearFromDateValue(dateValue); int m = monthFromDateValue(dateValue); int d = dayFromDateValue(dateValue); if (m <= 2) { y--; m += 12; } long a = ((y * 2922L) >> 3) + DAYS_OFFSET[m - 3] + d - 719484; if (y <= 1582 && ((y < 1582) || (m * 100 + d < 1005))) { // Julian calendar (cutover at 1582-10-04 / 1582-10-15) a += 13; } else if (y < 1901 || y > 2099) { // Gregorian calendar (slow mode) a += (y / 400) - (y / 100) + 15; } return a; }
/** * Append a date to the string builder. * * @param buff the target string builder * @param dateValue the date value */ static void appendDate(StringBuilder buff, long dateValue) { int y = DateTimeUtils.yearFromDateValue(dateValue); int m = DateTimeUtils.monthFromDateValue(dateValue); int d = DateTimeUtils.dayFromDateValue(dateValue); if (y > 0 && y < 10000) { StringUtils.appendZeroPadded(buff, 4, y); } else { buff.append(y); } buff.append('-'); StringUtils.appendZeroPadded(buff, 2, m); buff.append('-'); StringUtils.appendZeroPadded(buff, 2, d); }
long h = m / 60; m -= h * 60; setCalendarFields(cal, yearFromDateValue(dateValue), monthFromDateValue(dateValue), dayFromDateValue(dateValue), (int) h, (int) m, (int) s, (int) millis); long ms = cal.getTimeInMillis();
int year = DateTimeUtils.yearFromDateValue(dateValue); int month = DateTimeUtils.monthFromDateValue(dateValue); int day = DateTimeUtils.dayFromDateValue(dateValue); long ms = nanos / 1000000; nanos -= ms * 1000000;