Calcular la diferencia entre dos fechas en Java
Esta publicación discutirá cómo calcular la diferencia entre dos fechas en Java.
1. Usando TimeUnit.convert()
método
La idea es primero obtener la diferencia entre dos fechas en milisegundos usando el Date.getTime()
método. Entonces podemos usar el convert()
método de java.util.concurrent.TimeUnit
enum para convertir la duración de tiempo dada en la unidad dada a la unidad del argumento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; class Main { public static void main(String[] args) { String d1 = "10-20-2016"; String d2 = "10-19-2016"; String pattern = "MM-dd-yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { Date date1 = sdf.parse(d1); Date date2 = sdf.parse(d2); // obtener la diferencia entre dos fechas en minutos long elapsedms = date1.getTime() - date2.getTime(); long diff = TimeUnit.MINUTES.convert(elapsedms, TimeUnit.MILLISECONDS); System.out.println(diff); } catch (ParseException e) { e.printStackTrace(); } } } |
Resultado:
1440
Tenga en cuenta que el fragmento de código anterior no considera las zonas horarias como java.util.Date
siempre está en UTC
. Además, esto no tendrá en cuenta el horario de verano.
2. Usando java.time
paquete
Desde Java 8 en adelante, deberíamos usar el java.time
paquete que ofrece muchas mejoras con respecto a la API de fecha y hora de Java existente. Así es como podemos calcular la diferencia entre dos fechas como Duration
en Java 8 y superior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.time.Duration; import java.time.ZonedDateTime; class Main { public static void main(String[] args) { ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime then = now.minusMonths(2).minusDays(10) .minusMinutes(5).minusSeconds(40); Duration duration = Duration.between(then, now); System.out.println(duration); // System.out.println(duration.getSeconds()); // System.out.println(duration.toMinutes()); // System.out.println(duration.toHours()); // System.out.println(duration.toDays()); } } |
Resultado:
PT1704H5M40S
Si tienes un java.util.Date
objeto, debe convertirlo en java.time.Instant
y luego calcule el tiempo transcurrido como una Duración.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.Instant; import java.util.Date; class Main { public static void main(String[] args) { String d = "12/25/2018"; SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); try { Date date = sdf.parse(d); Duration duration = Duration.between(date.toInstant(), Instant.now()); System.out.println(duration); } catch (ParseException e) { e.printStackTrace(); } } } |
Resultado:
PT3880H26M38.942S
3. Usando Joda Time
Antes de Java 8, muchos proyectos de Java han utilizado el Biblioteca Joda-Time para Fecha y Time
clases Esto se debe a que las clases estándar de fecha y hora anteriores a Java 8 son deficientes. Pero con la introducción de la java.time
paquete en Java SE 8, el equipo de Joda-Time ha pedido a sus usuarios que migren a java.time
(JSR-310).
Si está utilizando la biblioteca Joda-Time en su proyecto y solo desea conocer el número total de días completos entre dos fechas, puede utilizar la nueva Days
class en la versión 1.4 de Joda-Time.
1 2 |
Days d = Days.daysBetween(startDate, endDate); int days = d.getDays(); |
Si desea calcular el número total de días, semanas, meses y años entre las dos fechas, necesita un Period
. De forma predeterminada, esto dividirá la diferencia entre las dos fechas y horas en partes, como "1 mes, 2 semanas, 4 días y 7 horas".
1 |
Period p = new Period(startDate, endDate); |
Puede controlar qué campos se extraen usando un PeriodType
.
1 |
Period p = new Period(startDate, endDate, PeriodType.yearMonthDay()); |
Este ejemplo no devolverá semanas ni campos de tiempo; así, el ejemplo anterior se convierte en “1 mes y 18 días”.
Se trata de calcular la diferencia entre dos fechas en Java.