Restar fechas en Java

Rupam Yadav 12 octubre 2023
  1. Usa java.util.Date para restar dos fechas en Java
  2. Utilizar java.time.Duration y java.time.Period para restar dos fechas en Java
  3. Utilizar java.time.temporal.ChronoUnit para restar dos fechas en Java
  4. Utilice java.time.temporal.Temporal until() para restar dos fechas en Java
Restar fechas en Java

Este artículo explica cómo podemos restar dos fechas u obtener la diferencia entre dos fechas en Java.

Usa java.util.Date para restar dos fechas en Java

La clase java.text.SimpleDateFormat se utiliza para formatear y analizar las fechas según el patrón especificado. Calculamos el valor absoluto de la diferencia de tiempo entre las dos fechas en milisegundos.

El método convert() de la clase TimeUnit acepta dos parámetros, que son la duración del tiempo y la unidad de la duración del tiempo. Creamos un objeto TimeUnit time y convertimos los milisegundos en días utilizando el método convert().

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeUnit;

public class Main {
  public static void main(String[] args) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
    Date firstDate = sdf.parse("04/22/2020");
    Date secondDate = sdf.parse("04/27/2020");

    long diff = secondDate.getTime() - firstDate.getTime();

    TimeUnit time = TimeUnit.DAYS;
    long diffrence = time.convert(diff, TimeUnit.MILLISECONDS);
    System.out.println("The difference in days is : " + diffrence);
  }
}

Producción :

The difference in days is : 5

Utilizar java.time.Duration y java.time.Period para restar dos fechas en Java

La clase Duration mide una cantidad de tiempo en segundos y nanosegundos, mientras que la clase Period mide el tiempo en años, meses y días. El método atStartofDay() añade la hora de medianoche a la fecha local.

Obtenemos el objeto Period como la diferencia entre dos fechas, mientras que obtenemos la diferencia entre dos instantes como el objeto Duration utilizando el método between(). Se prefiere el método Duration para cantidades de tiempo más cortas.

La duración diff se convierte en días utilizando toDays(). Del mismo modo, podemos obtener las unidades de fecha de Period utilizando getYears(), getMonths, y getDays().

import java.time.Duration;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;

public class Main {
  public static void main(String[] args) throws Exception {
    LocalDate d1 = LocalDate.parse("2020-05-06", DateTimeFormatter.ISO_LOCAL_DATE);
    LocalDate d2 = LocalDate.parse("2020-05-30", DateTimeFormatter.ISO_LOCAL_DATE);

    LocalDate d3 = LocalDate.parse("2018-05-06", DateTimeFormatter.ISO_LOCAL_DATE);
    LocalDate d4 = LocalDate.parse("2020-01-23", DateTimeFormatter.ISO_LOCAL_DATE);

    Duration diff = Duration.between(d1.atStartOfDay(), d2.atStartOfDay());
    Period period = Period.between(d3, d4);

    long diffDays = diff.toDays();
    int years = Math.abs(period.getYears());
    int months = Math.abs(period.getMonths());
    int days = Math.abs(period.getDays());
    System.out.println("Diffrence between dates is : " + diffDays + "days");
    System.out.println(
        "Diffrence is : " + years + " year, " + months + " months, " + days + " days");
  }
}

Producción :

Diffrence between dates is : 24days
Diffrence is : 1 year, 8 months, 17 days

Utilizar java.time.temporal.ChronoUnit para restar dos fechas en Java

En Java 8, la API Time representa una unidad de fecha-tiempo utilizando la interfaz TemporalUnit. Cada unidad proporciona una implementación del método llamado between(). Este método calcula la cantidad de tiempo entre dos objetos temporales.

La ChronoUnit es el conjunto estándar de unidades de fecha-hora que proporciona un acceso basado en unidades para manipular una fecha, hora o fecha-hora.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class Main {
  public static void main(String[] args) throws Exception {
    LocalDate dBefore = LocalDate.parse("2018-05-06", DateTimeFormatter.ISO_LOCAL_DATE);
    LocalDate dAfter = LocalDate.parse("2018-05-30", DateTimeFormatter.ISO_LOCAL_DATE);

    long diff = ChronoUnit.DAYS.between(dBefore, dAfter);
    System.out.println("difference is : " + diff);
  }
}

Producción :

difference is : 24

Utilice java.time.temporal.Temporal until() para restar dos fechas en Java

El método until() calcula la cantidad de tiempo hasta otro temporal en términos de la unidad especificada. El resultado será negativo si el final es anterior al inicio.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;

public class Main {
  public static void main(String[] args) throws Exception {
    LocalDate dBefore = LocalDate.parse("2018-05-21", DateTimeFormatter.ISO_LOCAL_DATE);
    LocalDate dAfter = LocalDate.parse("2018-05-30", DateTimeFormatter.ISO_LOCAL_DATE);

    long diff = dBefore.until(dAfter, ChronoUnit.DAYS);
    System.out.println("difference is : " + diff + " days");
  }
}

Producción :

difference is : 9 days
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artículo relacionado - Java DateTime