Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

161
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!