Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
Compara dos fechas en años con coma y año bisiesto

Hay muchas entradas en Internet sobre cómo se puede comparar la diferencia entre dos fechas. Sin embargo, todavía no he encontrado la solución adecuada para mí.

En resumen: estoy buscando el equivalente de la dayjs (biblioteca diff - dayJs ) con el parámetro "años" y una coma. Para obtener la salida (ejemplo): 7.645161290322581 años

 const date1 = dayjs('2019-01-25') date1.diff('2012-06-05', 'year', true) // 6.639424491947131

Una buena solución habría sido between . Desafortunadamente, el siguiente código solo me da el año sin coma.

 long diff = ChronoUnit.YEARS.between(date1, date2);

Lamentablemente, esta solución me da solo 6 años y NO 6.639424491947131.

He encontrado otras soluciones, pero no tienen en cuenta los años bisiestos.

¿Podría alguien ayudarme aquí?

//EDITAR

Gracias por las respuestas. Sin embargo, los días no son una opción. Necesito los años con coma. Cambiado 7.49 a 6.639424491947131

Días / 365 es demasiado inexacto. A veces tienes un año bisiesto a veces no.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No estoy diciendo que esta sea "la respuesta", pero debería ser una sugerencia para que usted pueda basar su solución.

 public static void main(String[] args) { Date date1 = Date.from(Instant.now()); Calendar cal = new GregorianCalendar(2021,Calendar.JANUARY, 1); Date date2 = cal.getTime(); long diffInMillies = Math.abs(date2.getTime() - date1.getTime()); long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); System.out.println("Difference in days: " + diff); BigDecimal yDiff = new BigDecimal(diff/365.25); System.out.println("Difference in years: " + yDiff.doubleValue()); }

Podría tomar un código como este y envolverlo en una función que manipule la diferencia entre dos fechas utilizando bibliotecas estándar de Java. Como puede ver en el siguiente ejemplo, utilicé la biblioteca de Java para calcular la diferencia de dos fechas en días y luego hice un cálculo simple para extrapolar la diferencia en años. No estoy seguro de por qué esto no será un compromiso aceptable.

El uso de BigDecimal en lugar de double le brinda más precisión y una forma más fácil de definir dígitos significativos.

over 4 years ago · Santiago Trujillo Denunciar

0

tl; dr

 ChronoUnit .DAYS .between( LocalDate.parse( "2012-06-05" ) , LocalDate.parse( "2019-01-25" ) ) / 365.2425d

Vea este código ejecutado en vivo en IdeOne.com .

6.639424491947131

Detalles

¿Por qué no usar un conteo de días? Eso es lo que significa una fracción decimal de años entre fechas: una cuenta de días. Una fracción decimal de 15 lugares crea la ilusión de precisión que en realidad no está presente cuando se comparan dos fechas.

 LocalDate start = LocalDate.parse( "2012-06-05" ) ; LocalDate end = LocalDate.parse( "2019-01-25" ) ; long daysElapsed = ChronoUnit.DAYS.between( start , end ) ;

Si insiste en una fracción, divídala por cualquier fracción de días por año que tenga sentido para usted.

Los días por año durante un ciclo de 400 años del calendario gregoriano son 365.2425 .

 double DAYS_PER_YEAR = 365.2425d ; double yearsElapsed = ( daysElapsed / DAYS_PER_YEAR ) ;

Para mayor precisión, use BigDecimal en lugar de double .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda