Sottrai le date in Java

Rupam Yadav 12 ottobre 2023
  1. Usa java.util.Date per sottrarre due date in Java
  2. Usa java.time.Duration e java.time.Period per sottrarre due date in Java
  3. Usa java.time.temporal.ChronoUnit per sottrarre due date in Java
  4. Usa java.time.temporal.Temporal until() per sottrarre due date in Java
Sottrai le date in Java

Questo articolo spiega come possiamo sottrarre due date o ottenere la differenza tra due date in Java.

Usa java.util.Date per sottrarre due date in Java

La classe java.text.SimpleDateFormat viene utilizzata per formattare e analizzare le date in base al modello specificato. Calcoliamo il valore assoluto della differenza di tempo tra le due date in millisecondi.

Il metodo convert() della classe TimeUnit accetta due parametri, che sono la durata del tempo e l’unità della durata del tempo. Creiamo un oggetto TimeUnit time e convertiamo i millisecondi in giorni utilizzando il metodo 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);
  }
}

Produzione:

The difference in days is : 5

Usa java.time.Duration e java.time.Period per sottrarre due date in Java

La classe Duration misura una quantità di tempo in secondi e nanosecondi, mentre la classe Period misura il tempo in anni, mesi e giorni. Il metodo atStartofDay() aggiunge l’ora di mezzanotte alla data locale.

Otteniamo l’oggetto Period come differenza tra due date, mentre otteniamo la differenza tra due istanti come oggetto Duration utilizzando il metodo between(). La durata è preferibile per periodi di tempo più brevi.

La durata diff viene convertita in giorni utilizzando toDays(). Allo stesso modo, possiamo ottenere le unità di data di Period usando getYears(), getMonths e 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");
  }
}

Produzione:

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

Usa java.time.temporal.ChronoUnit per sottrarre due date in Java

In Java 8, la Time API rappresenta un’unità di data-ora utilizzando l’interfaccia TemporalUnit. Ogni unità fornisce un’implementazione del metodo denominato between(). Questo metodo calcola la quantità di tempo tra due oggetti temporali.

ChronoUnit è il set standard di unità di data e ora che fornisce un accesso basato su unità per manipolare una data, ora o data-ora.

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);
  }
}

Produzione:

difference is : 24

Usa java.time.temporal.Temporal until() per sottrarre due date in Java

Il metodo until() calcola la quantità di tempo fino a un altro temporale in termini di unità specificata. Il risultato sarà negativo se la fine è prima dell’inizio.

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");
  }
}

Produzione:

difference is : 9 days
Autore: Rupam Yadav
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

Articolo correlato - Java DateTime