Come si calcola il numero di anni di differenza tra 2 calendari in Java?Come si calcola il numero di anni di differenza tra 2 date?
risposta
Per prima cosa è necessario determinare quale è più vecchio dell'altro. Quindi utilizzare un ciclo while
in cui si verifica se il più vecchio non è after()
quello più recente. Richiama Calendar#add()
con uno (1
) Calendar.YEAR
sul vecchio per aggiungere gli anni. Mantieni un contatore per contare gli anni.
Kickoff esempio:
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
Detto questo, il Date
e Calendar
API di Java SE sono in realtà fallimenti epici. C'è una nuova API Date nella pianificazione del prossimo Java 8, lo JSR-310 che è molto simile a Joda-Time. Per ora puoi prendere in considerazione Joda-Time poiché facilita davvero i calcoli/le modifiche Data/Ora come questo. Ecco un esempio utilizzando 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
Molto più chiaro e conciso, non è vero?
Oppure si può semplicemente utilizzare Calendar.getTimeInMillis()
:
long msYear = 1000L * 60 * 60 * 24 * 365;
long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis();
System.out.println("Years diff: " + String.valueOf(msDiff/msYear));
Modifica Questo ignora gli anni bisestili. Ma se stai cercando una rappresentazione intera del numero di anni in cui gli anni bisestili sono irrilevanti per periodi inferiori a mezzo millennio circa.
Questo è un sacco di esattezza per il calcolo dell'età di qualcuno, per esempio. Ma non abbastanza preciso da dire il loro compleanno.
Se è necessaria la differenza dell'anno più precisa rispetto a tre cifre significative all'interno di una vita umana (circa 80,00 anni rispetto a 80,05), è necessario utilizzare la soluzione "ufficiale".
In caso contrario, non vi è alcun motivo particolare per aumentare lo sforzo per un livello di precisione che non si intende utilizzare.
Questo account è valido per gli anni bisestili, i minuti bisestili, ecc.? –
No. Supponendo che se cerchi multipli di anni, non sei eccessivamente preoccupato per un giorno o due di disallineamento. Se cerchi la lunghezza esatta dell'anno in Wikipedia, puoi ottenerla il più vicino possibile a lungo termine. –
@Nick: salto * minuti * ?? –
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--;
}
Ciò evita il looping e dovrebbe essere preciso per il giorno.
double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff/d);
(java.lang.Math)
Nota: Attenzione agli anni bisestili e ad altre stranezze del calendario. – michaelb958
- 1. Come si calcola il numero di settimane tra due date?
- 2. Come posso trovare il numero di anni tra due date?
- 3. Calcola il numero di giorni tra due date in java
- 4. Calcolare il numero di anni tra le date in Sql
- 5. Differenza tra due date con diversi anni
- 6. Calcola la differenza tra due date e ottieni il valore in anni?
- 7. Come si calcola il numero di giorni, meno domeniche, tra due date in C#?
- 8. Calcola il numero di giorni tra due date?
- 9. come calcolare il numero di settimane date 2 date?
- 10. Come si calcola il numero di giorni tra due date usando Python?
- 11. Calcola anni dalla data
- 12. L'implementazione del calcolo del numero di giorni tra 2 date
- 13. Calcola # di Anni Vivi in C# WinForm
- 14. Differenza tra 2 date in secondi ios
- 15. Calcola la differenza di data esatta in anni utilizzando SQL
- 16. Determinare il numero di mesi tra due date utilizzando Cocoa
- 17. Come ottenere l'elenco di mesi e anni tra due date
- 18. Calcola il numero di giorni della settimana tra due date in C#
- 19. PHP Differenza tra mesi tra due date?
- 20. Come trovare il numero di giorni tra due date
- 21. Come calcolare il numero di anni bisestili tra due anni in C#
- 22. Calcola il numero di giorni tra due date all'interno dei modelli Django
- 23. Calcola l'area tra 2 curve
- 24. calcola la domenica tra due date
- 25. Come trovare il numero di giorni tra due date/DateTimePickers
- 26. Calcola la durata tra data ios in anni, mesi e formato data
- 27. Come posso ottenere il numero di giorni tra 2 date in Oracle 11g?
- 28. Calcola la differenza di tempo tra due volte javascript
- 29. momento js - due date differenza nel numero di giorni
- 30. Determinazione della differenza tra le date
o Years.yearsBetween (myBirthDate, ora) .getYears(); – mtpettyp
non riesco a creare l'oggetto del periodo. Sembra essere privato sotto java.util.time ... puoi aiutarmi, per favore come posso trovare la differenza dell'anno usando Periodo ?? –
@ Mr.Noddy: lo snippet di codice è JodaTime non JavaTime. In JavaTime, usa 'Periodo # tra()'. Vedi anche javadoc https://docs.oracle.com/javase/8/docs/api/java/time/Period.html – BalusC