Bloqueo de desbordamiento / desbordamiento con Java LocalTime

Jordan Mackie:

Al restar una cantidad dada de un objeto LocalTime, me he dado cuenta de que el desbordamiento / desbordamiento puede ocurrir.

Ejemplo:

00:30 - 35 minutes = 23:55
23:30 + 35 minutes = 00:05

Para mi solicitud, me gustaría tiempos de cierre de tal manera que lo anterior podría generar 00:00el flujo inferior, y 23:59en caso de desbordamiento.

es posible?

VV Ole:

Mi sugerencia es:

    LocalTime orig = LocalTime.of(0, 30);
    int minutesToSubtract = 35;
    long minutesSinceMidnight = ChronoUnit.MINUTES.between(LocalTime.MIN, orig);
    LocalTime result;
    if (minutesToSubtract > minutesSinceMidnight) {
        // Subtracting the minutes will pass midnight at start of day
        result = LocalTime.MIN;
    } else {
        // Normal case, no underflow
        result = orig.minusMinutes(minutesToSubtract);
    }
    System.out.println(result);

Lo anterior supone que minutesToSubtractes no negativo. Si se pueden producir números negativos, es necesario comprobar tanto para flujo inferior y rebosadero.

El caso de la comprobación de desbordamiento (más de 23:59:59.999999999) es similar. Utilizar LocalTime.MAXpara el final del día.

Editar: Código de JB Nizet para la otra operación en su comentario merece el formato de código adecuado, por lo que estoy pegando aquí:

public static LocalTime addWithoutOverflow(LocalTime baseTime, int minutes) {
    LocalTime maxTime = LocalTime.MAX;
    long maxNanos = ChronoUnit.NANOS.between(baseTime, maxTime);
    long nanos = Duration.ofMinutes(minutes).toNanos();
    return baseTime.plusNanos(Math.min(maxNanos, nanos));
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=186578&siteId=1
Recomendado
Clasificación