private Timestamp(BigDecimal millis, Precision precision, Integer localOffset) { if (millis == null) throw new NullPointerException("millis is null"); // check bounds to avoid hanging when calling longValue() on decimals with large positive exponents, // e.g. 1e10000000 if(millis.compareTo(MINIMUM_TIMESTAMP_IN_MILLIS_DECIMAL) < 0 || UPPER_BOUND_TIMESTAMP_IN_MILLIS_DECIMAL.compareTo(millis) <= 0) { throwTimestampOutOfRangeError(millis); } // quick handle integral zero long ms = isIntegralZero(millis) ? 0 : millis.longValue(); _calendar = calendarFromMillis(ms, localOffset); setFieldsFromCalendar(precision, localOffset != null, APPLY_OFFSET_NO); // The given BigDecimal may contain greater than milliseconds precision, which is the maximum precision that // a Calendar can handle. Set the _fraction here so that extra precision (if any) is not lost. // However, don't set the fraction if the given BigDecimal does not have precision at least to the tenth of // a second. if (precision.includes(Precision.SECOND) && millis.scale() > -3) { BigDecimal secs = millis.movePointLeft(3); BigDecimal secsDown = fastRoundZeroFloor(secs); _fraction = secs.subtract(secsDown); } else { _fraction = null; } checkFraction(precision, _fraction); }
_precision = checkFraction(p, _fraction);
BigDecimal millis = BigDecimal.valueOf(_calendar.get(Calendar.MILLISECOND)); this._fraction = millis.movePointLeft(3); // convert to fraction checkFraction(precision, this._fraction);
/** * Creates a new Timestamp that represents the point in time that is * {@code millis} milliseconds from the epoch, with a given local offset. * <p> * The resulting Timestamp will be precise to the fractional second. * * @param millis * number of milliseconds from the epoch (1970-01-01T00:00:00.000Z) * @param localOffset * the local offset from UTC, measured in minutes; * may be {@code null} to represent an unknown local offset. */ @Deprecated private Timestamp(long millis, Integer localOffset) { this.set_fields_from_millis(millis); // fractional seconds portion BigDecimal secs = BigDecimal.valueOf(millis).movePointLeft(3); BigDecimal secsDown = secs.setScale(0, RoundingMode.FLOOR); this._fraction = secs.subtract(secsDown); this._precision = checkFraction(Precision.SECOND, _fraction); this._offset = localOffset; }
/** * Creates a new Timestamp that represents the point in time that is * {@code millis} milliseconds from the epoch, with a given local offset. * <p> * The resulting Timestamp will be precise to the fractional second. * * @param millis * number of milliseconds from the epoch (1970-01-01T00:00:00.000Z) * @param localOffset * the local offset from UTC, measured in minutes; * may be {@code null} to represent an unknown local offset. */ @Deprecated private Timestamp(long millis, Integer localOffset) { this.set_fields_from_millis(millis); // fractional seconds portion BigDecimal secs = BigDecimal.valueOf(millis).movePointLeft(3); BigDecimal secsDown = secs.setScale(0, RoundingMode.FLOOR); this._fraction = secs.subtract(secsDown); this._precision = checkFraction(Precision.SECOND, _fraction); this._offset = localOffset; }
private Timestamp(BigDecimal millis, Precision precision, Integer localOffset) { long ms = millis.longValue(); set_fields_from_millis(ms); switch (precision) { case YEAR: _month = 1; case MONTH: _day = 1; case DAY: _hour = 0; _minute = 0; case MINUTE: _second = 0; _fraction = null; break; case SECOND: BigDecimal secs = millis.movePointLeft(3); BigDecimal secsDown = secs.setScale(0, RoundingMode.FLOOR); _fraction = secs.subtract(secsDown); } _precision = checkFraction(precision, _fraction); _offset = localOffset; }
private Timestamp(BigDecimal millis, Precision precision, Integer localOffset) { long ms = millis.longValue(); set_fields_from_millis(ms); switch (precision) { case YEAR: _month = 1; case MONTH: _day = 1; case DAY: _hour = 0; _minute = 0; case MINUTE: _second = 0; _fraction = null; break; case SECOND: BigDecimal secs = millis.movePointLeft(3); BigDecimal secsDown = secs.setScale(0, RoundingMode.FLOOR); _fraction = secs.subtract(secsDown); } _precision = checkFraction(precision, _fraction); _offset = localOffset; }
_precision = checkFraction(p, _fraction);
_precision = checkFraction(p, _fraction);