¿Cómo calculo la cantidad de años de diferencia entre 2 calendarios en Java?¿Cómo calculo la cantidad de años de diferencia entre 2 fechas?
Respuesta
Primero debe determinar cuál es más antiguo que el otro. Luego haga uso de un while
loop donde prueba si el anterior no es after()
el más nuevo. Invoque Calendar#add()
con uno (1
) Calendar.YEAR
en el anterior para agregar los años. Mantenga un contador para contar los años.
ejemplo Comienzo:
Calendar myBirthDate = Calendar.getInstance();
myBirthDate.clear();
myBirthDate.set(1978, 3 - 1, 26);
Calendar now = Calendar.getInstance();
Calendar clone = (Calendar) myBirthDate.clone(); // Otherwise changes are been reflected.
int years = -1;
while (!clone.after(now)) {
clone.add(Calendar.YEAR, 1);
years++;
}
System.out.println(years); // 32
Dicho esto, el Date
Calendar
y API de Java SE en realidad son fracasos épicos. Hay una nueva API de fecha en la planificación de la próxima Java 8, la JSR-310 que es muy similar a Joda-Time. Hasta ahora, es posible que desee considerar Joda-Time, ya que realmente facilita los cálculos/modificaciones de fecha/hora como este. Aquí hay un ejemplo usando Joda-Time:
DateTime myBirthDate = new DateTime(1978, 3, 26, 0, 0, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
int years = period.getYears();
System.out.println(years); // 32
Mucho más claro y conciso, no es así?
O usted podría utilizar Calendar.getTimeInMillis()
:
long msYear = 1000L * 60 * 60 * 24 * 365;
long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis();
System.out.println("Years diff: " + String.valueOf(msDiff/msYear));
Editar Esto ignora los años bisiestos. Pero si busca una representación entera del número de años, los años bisiestos son irrelevantes por períodos inferiores a medio milenio más o menos.
Esto es bastante exacto para calcular la edad de alguien, por ejemplo. Pero no es lo suficientemente preciso como para contar su cumpleaños.
Si necesita su diferencia de año más exacta que tres dígitos significativos dentro de una vida humana (aproximadamente 80.00 años vs 80.05), debe usar la solución "oficial".
De lo contrario, no hay ninguna razón en particular para esforzarse más por un grado de precisión que no va a utilizar.
¿Esto cuenta para los años bisiestos, los minutos bisiestos, etc.? –
No. Suponiendo que si está buscando múltiples años, no está demasiado preocupado por uno o dos días de desajuste. Si busca la longitud exacta del año en Wikipedia, puede obtenerla lo más cerca que desee a la larga. –
@Nick: salto * minutos * ?? –
Calendar dobDate; // Set this to date to check
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int curDay = today.get(Calendar.DAY_OF_MONTH);
int year = dobDate.get(Calendar.YEAR);
int month = dobDate.get(Calendar.MONTH);
int day = dobDate.get(Calendar.DAY_OF_MONTH);
int age = curYear - year;
if (curMonth < month || (month == curMonth && curDay < day)) {
age--;
}
Esto evita los bucles y debe ser preciso para el día.
double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff/d);
(java.lang.Math)
Nota: Tenga cuidado con los años bisiestos y otras rarezas del calendario. – michaelb958
- 1. Cálculo del número de años entre 2 fechas en PHP
- 2. Diferencia entre 2 fechas en SQLite
- 3. Cómo obtener la diferencia horaria (en horas) entre 2 fechas
- 4. ¿Cómo puedo calcular el número de años entre dos fechas?
- 5. Diferencia de fecha (en años) incl. fracción años
- 6. Calcular el número de horas entre 2 fechas en PHP
- 7. ¿Cómo puedo encontrar el número de años entre dos fechas?
- 8. Encontrar la diferencia entre 2 fechas en xslt
- 9. ¿Cómo puedo obtener la cantidad de días entre 2 fechas en Oracle 11g?
- 10. Obtenga la diferencia en años entre dos fechas en MySQL como un número entero
- 11. Diferencia entre 2 fechas en cuestión de segundos
- 12. Diferencia de fecha en años usando C#
- 13. Calcule la diferencia entre dos fechas y obtenga el valor en años?
- 14. Calcular Número de años entre las fechas en Sql
- 15. calcule la diferencia entre dos fechas datetime.date() en años y meses
- 16. ¿Diferencia entre 2 fechas y horas en horas?
- 17. calcular la diferencia entre dos fechas
- 18. ¿Cómo calculo el número de días, menos los domingos, entre dos fechas en C#?
- 19. Diferencia entre fechas en JavaScript
- 20. C# - ¿Diferencia entre dos fechas?
- 21. ¿Cómo obtener la diferencia entre dos fechas redondeadas a horas
- 22. ¿Cómo calculo el ancho entre dos elementos?
- 23. Seleccione la diferencia entre las fechas de fila en MySQL
- 24. Diferencia de días entre dos fechas
- 25. ¿Cómo calculo la diferencia de dos medidas de ángulo?
- 26. Diferencia, en minutos, entre dos fechas
- 27. ¿Cómo obtengo la diferencia entre dos fechas en JavaScript?
- 28. ¿Cómo verifico la diferencia, en segundos, entre dos fechas?
- 29. ¿Cómo puedo obtener la diferencia entre dos fechas bajo bash
- 30. Cómo encontrar la diferencia entre las fechas en VBA
o Years.yearsBetween (myBirthDate, ahora) .getYears(); – mtpettyp
no puedo crear el objeto del período. Parece ser privado en java.util.time ... ¿me pueden ayudar, por favor, cómo puedo encontrar la diferencia del año usando Period? –
@ Mr.Noddy: el fragmento de código es JodaTime no JavaTime. En JavaTime, use 'Periodo # entre()'. Ver también javadoc https://docs.oracle.com/javase/8/docs/api/java/time/Period.html – BalusC