Ich versuche, den Unterschied zwischen zwei LocalDateTime
zu berechnen.
Die Ausgabe muss im Format y Jahre m Monate d Tage h Stunden m Minuten s Sekunden
sein. Hier ist, was ich geschrieben habe:
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
public class Main {
static final int MINUTES_PER_HOUR = 60;
static final int SECONDS_PER_MINUTE = 60;
static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;
public static void main(String[] args) {
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
Period period = getPeriod(fromDateTime, toDateTime);
long time[] = getTime(fromDateTime, toDateTime);
System.out.println(period.getYears() + " Jahre " +
period.getMonths() + " Monate " +
period.getDays() + " Tage " +
time[0] + " Stunden " +
time[1] + " Minuten " +
time[2] + " Sekunden.");
}
private static Period getPeriod(LocalDateTime dob, LocalDateTime now) {
return Period.between(dob.toLocalDate(), now.toLocalDate());
}
private static long[] getTime(LocalDateTime dob, LocalDateTime now) {
LocalDateTime today = LocalDateTime.of(now.getYear(),
now.getMonthValue(), now.getDayOfMonth(), dob.getHour(), dob.getMinute(), dob.getSecond());
Duration duration = Duration.between(today, now);
long seconds = duration.getSeconds();
long hours = seconds / SECONDS_PER_HOUR;
long minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
long secs = (seconds % SECONDS_PER_MINUTE);
return new long[]{hours, minutes, secs};
}
}
Die Ausgabe, die ich erhalte, ist 29 Jahre 8 Monate 24 Tage 12 Stunden 0 Minuten 50 Sekunden
. Ich habe mein Ergebnis von dieser Website überprüft (mit den Werten 16.12.1984 07:45:55
und 09.09.2014 19:46:45
). Der folgende Screenshot zeigt die Ausgabe:
Ich bin ziemlich sicher, dass die Felder nach dem Monatswert in meinem Code falsch sind. Jeder Vorschlag wäre sehr hilfreich.
Aktualisierung
Ich habe mein Ergebnis von einer anderen Website getestet und das Ergebnis, das ich erhalten habe, ist anders. Hier ist es: Berechnen Sie die Dauer zwischen zwei Daten (Ergebnis: 29 Jahre, 8 Monate, 24 Tage, 12 Stunden, 0 Minuten und 50 Sekunden).
Aktualisierung
Da ich von zwei verschiedenen Websites zwei verschiedene Ergebnisse erhalten habe, frage ich mich, ob der Algorithmus meiner Berechnung legitim ist oder nicht. Wenn ich die folgenden zwei LocalDateTime
-Objekte verwende:
LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 10, 6, 40, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
Dann lautet die Ausgabe: 29 Jahre 8 Monate 25 Tage -1 Stunden -5 Minuten -10 Sekunden.
Wie aus diesem Link hervorgeht, sollte es 29 Jahre 8 Monate 24 Tage 22 Stunden, 54 Minuten und 50 Sekunden
sein. Daher muss der Algorithmus auch mit negativen Zahlen umgehen können.
Bitte beachten Sie, dass es nicht um die Frage geht, welche Site mir welches Ergebnis gegeben hat. Ich möchte den richtigen Algorithmus kennen und die richtigen Ergebnisse haben.