/** * Calculate the normalized timestamp. * * @param absoluteDay the absolute day * @param nanos the nanoseconds (may be negative or larger than one day) * @return the timestamp */ public static ValueTimestamp normalizeTimestamp(long absoluteDay, long nanos) { if (nanos > NANOS_PER_DAY || nanos < 0) { long d; if (nanos > NANOS_PER_DAY) { d = nanos / NANOS_PER_DAY; } else { d = (nanos - NANOS_PER_DAY + 1) / NANOS_PER_DAY; } nanos -= d * NANOS_PER_DAY; absoluteDay += d; } return ValueTimestamp.fromDateValueAndNanos( dateValueFromAbsoluteDay(absoluteDay), nanos); }
/** * Get or create a timestamp value for the given timestamp. * * @param timestamp the timestamp * @return the value */ public static ValueTimestamp get(Timestamp timestamp) { long ms = timestamp.getTime(); long nanos = timestamp.getNanos() % 1000000; long dateValue = DateTimeUtils.dateValueFromDate(ms); nanos += DateTimeUtils.nanosFromDate(ms); return fromDateValueAndNanos(dateValue, nanos); }
/** * Get or create a timestamp value for the given date/time in millis. * * @param ms the milliseconds * @return the value */ public static ValueTimestamp fromMillis(long ms) { long dateValue = DateTimeUtils.dateValueFromDate(ms); long nanos = DateTimeUtils.nanosFromDate(ms); return fromDateValueAndNanos(dateValue, nanos); }
/** * Get or create a timestamp value for the given date/time in millis. * * @param ms the milliseconds * @param nanos the nanoseconds * @return the value */ public static ValueTimestamp fromMillisNanos(long ms, int nanos) { long dateValue = DateTimeUtils.dateValueFromDate(ms); long timeNanos = nanos + DateTimeUtils.nanosFromDate(ms); return fromDateValueAndNanos(dateValue, timeNanos); }
/** * Convert the timestamp using the specified calendar. * * @param x the time * @param calendar the calendar * @return the timestamp */ public static ValueTimestamp convertTimestamp(Timestamp x, Calendar calendar) { if (calendar == null) { throw DbException.getInvalidValueException("calendar", null); } Calendar cal = (Calendar) calendar.clone(); cal.setTimeInMillis(x.getTime()); long dateValue = dateValueFromCalendar(cal); long nanos = nanosFromCalendar(cal); nanos += x.getNanos() % 1000000; return ValueTimestamp.fromDateValueAndNanos(dateValue, nanos); }
@Override public Value convertScale(boolean onlyToSmallerScale, int targetScale) { if (targetScale >= DEFAULT_SCALE) { return this; } if (targetScale < 0) { throw DbException.getInvalidValueException("scale", targetScale); } long n = timeNanos; BigDecimal bd = BigDecimal.valueOf(n); bd = bd.movePointLeft(9); bd = ValueDecimal.setScale(bd, targetScale); bd = bd.movePointRight(9); long n2 = bd.longValue(); if (n2 == n) { return this; } return fromDateValueAndNanos(dateValue, n2); }
return ValueTimestamp.fromDateValueAndNanos(dateValue, nanos);
0, ((ValueTime) this).getNanos()); case DATE: return ValueTimestamp.fromDateValueAndNanos( ((ValueDate) this).getDateValue(), 0);