/** * 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); }
long md = DateTimeUtils.MILLIS_PER_DAY; long absoluteDay = (ms >= 0 ? ms : ms - md + 1) / md; dateValue = DateTimeUtils.dateValueFromAbsoluteDay(absoluteDay); ms -= absoluteDay * md; nanos += ms * 1000000;