Ich muss die Anzahl der Tage zwischen zwei Daten ermitteln : einer stammt aus einem Bericht und einer ist das aktuelle Datum. Mein Ausschnitt:
int age=calculateDifference(agingDate, today);
Hier calculateDifference
ist eine private Methode agingDate
und today
sind Date
Objekte, nur zur Verdeutlichung. Ich habe zwei Artikel aus einem Java-Forum verfolgt, Thread 1 / Thread 2 .
Es funktioniert gut in einem eigenständigen Programm, obwohl ich einen ungewöhnlichen Wertunterschied erhalte, wenn ich dies in meine Logik einbeziehe, um aus dem Bericht zu lesen.
Warum passiert es und wie kann ich es beheben?
EDIT:
Ich erhalte eine größere Anzahl von Tagen als die tatsächliche Anzahl von Tagen.
public static int calculateDifference(Date a, Date b)
{
int tempDifference = 0;
int difference = 0;
Calendar earlier = Calendar.getInstance();
Calendar later = Calendar.getInstance();
if (a.compareTo(b) < 0)
{
earlier.setTime(a);
later.setTime(b);
}
else
{
earlier.setTime(b);
later.setTime(a);
}
while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))
{
tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));
difference += tempDifference;
earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
}
if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR))
{
tempDifference = later.get(Calendar.DAY_OF_YEAR) - earlier.get(Calendar.DAY_OF_YEAR);
difference += tempDifference;
earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
}
return difference;
}
Hinweis :
Leider hat mir keine der Antworten geholfen, das Problem zu lösen. Ich habe dieses Problem mit Hilfe der Joda-Zeitbibliothek gelöst .
java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen. Siehe Tutorial von Oracle . Ebenso befindet sich das Joda-Time- Projekt jetzt im Wartungsmodus , wobei das Team die Migration zu den Klassen java.time empfiehlt.