Nell’effettuare una comparazione tra due date bisogna stare attenti all’utilizzo del metodo getTime().
Spesso infatti quello che ci serve è soltanto paragonare le date in base a giorno mese e anno mentre il metodo getTime() tiene conto anche delle ore minuti secondi e millisecondi.
Può essere fuoriviante il seguente codice:
|
Se si prova ad eseguirlo il risultato sarà quasi sempre true, poiché d1 e d2 vengono create praticamente nello stesso istante, millisecondo compreso.
Se proviamo ad inserire però un Thread.sleep(1000) tra le due dichiarazioni di date vediamo che il risultato torna false, in quanto d2 ha 1 secondo in più di d1.
Anche se ci costruiamo una data usando l’oggetto Calendar in questo modo (come visto in un precedente post )
|
Si verifica lo stesso problema se tra d1 e d2 passa anche solo un millisecondo di differenza.
Le soluzioni possono essere due:
- Utilizzare Joda , una api appositamente creata per velocizzare le operazioni sulle Date, da sempre un tallone d’Achille del linguaggio Java (su cui conto di fare un post a breve);
- Modificare il metodo creaData inserendo anche ore minuti secondi e millisecondi
Se usiamo il metodo 2 e riscriviamo così il metodo creaData:
|
Il problema è risolto, e le date saranno finalmente paragonate senza tener conto dei loro diversi istanti di creazione.
Nessun commento:
Posta un commento