Mam dwa obiekty DateTime , które muszą znaleźć czas trwania ich różnicy ,
Mam następujący kod, ale nie wiem, jak go kontynuować, aby uzyskać oczekiwane wyniki w następujący sposób:
Przykład
11/03/14 09:30:58
11/03/14 09:33:43
elapsed time is 02 minutes and 45 seconds
-----------------------------------------------------
11/03/14 09:30:58
11/03/15 09:30:58
elapsed time is a day
-----------------------------------------------------
11/03/14 09:30:58
11/03/16 09:30:58
elapsed time is two days
-----------------------------------------------------
11/03/14 09:30:58
11/03/16 09:35:58
elapsed time is two days and 05 mintues
Kod
String dateStart = "11/03/14 09:29:58";
String dateStop = "11/03/14 09:33:43";
Custom date format
SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
} catch (ParseException e) {
e.printStackTrace();
}
// Get msec from each, and subtract.
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000);
System.out.println("Time in seconds: " + diffSeconds + " seconds.");
System.out.println("Time in minutes: " + diffMinutes + " minutes.");
System.out.println("Time in hours: " + diffHours + " hours.");
java
date-arithmetic
J888
źródło
źródło
Odpowiedzi:
spróbuj wykonać następujące czynności
źródło
Konwersję różnicy dat można lepiej obsłużyć za pomocą wbudowanej klasy Java, TimeUnit . Zapewnia narzędzia do tego:
źródło
Użyj biblioteki Joda-Time
Joda Time ma pojęcie przedziału czasowego:
Jeszcze jeden przykład różnicy dat
Jeszcze jeden link
lub z Javą-8 (która zintegrowała koncepcje Joda-Time)
źródło
Oto, jak problem można rozwiązać w Javie 8, podobnie jak odpowiedź autorstwa shamimza.
Źródło: http://docs.oracle.com/javase/tutorial/datetime/iso/period.html
Kod generuje dane wyjściowe podobne do następujących:
Musimy użyć LocalDateTime http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html, aby uzyskać różnice godzinowe, minutowe i sekundowe.
źródło
źródło
Możesz utworzyć metodę taką jak
Ta metoda zwróci liczbę dni między dwoma dniami.
źródło
Jak pisze Michael Borgwardt w swojej odpowiedzi tutaj :
źródło
W Javie 8, można zrobić z
DateTimeFormatter
,Duration
, iLocalDateTime
. Oto przykład:źródło
Pomogło mi, mogę spróbować z tym, mam nadzieję, że będzie to pomocne. Daj mi znać, jeśli masz jakiekolwiek obawy.
źródło
To jest kod:
a wyjście to:
źródło
w odniesieniu do aktualizacji odpowiedzi shamima jest to metoda, która wykonuje to zadanie bez korzystania z biblioteki innej firmy. Po prostu skopiuj metodę i użyj
źródło
Niedawno rozwiązałem podobny problem prostą metodą.
I zgodnie z oczekiwaniami to drukuje:
7 days ago
.źródło
To jest program, który napisałem, który pobiera liczbę dni między 2 datami (bez czasu).
http://pastebin.com/HRsjTtUf
źródło
java.time.Duration
Nadal nie czułem, że żadna z odpowiedzi była dość aktualna i na temat. Oto współczesna odpowiedź wykorzystująca
Duration
z java.time, nowoczesnego API daty i czasu Javy (odpowiedzi MayurB i mkobit wspominają o tej samej klasie, ale żadna z nich nie konwertuje poprawnie na dni, godziny, minuty i minuty zgodnie z pytaniem).Dane wyjściowe z tego przykładowego fragmentu kodu to:
Pamiętaj, że
Duration
dzień liczy się zawsze jako 24 godziny. Jeśli chcesz inaczej traktować anomalie czasowe, takie jak przejścia w czasie letnim, rozwiązania obejmują (1) użyjChronoUnit.DAYS
(2) UżyjPeriod
(3)Use
LocalDateTimeinstead of
ZonedDateTime` (może to być traktowane jako hack).Powyższy kod działa z Javą 8 i ThreeTen Backport, tym backportem java.time do Javy 6 i 7. Z Java 9 może być możliwe napisanie go trochę ładniej przy użyciu metod
toHoursPart
,toMinutesPart
itoSecondsPart
dodaje tam.Wyjaśnię dalej w jeden z dni, kiedy będę miał czas, może nie wcześniej niż w przyszłym tygodniu.
źródło
Jak obliczyć różnicę między dwiema datami w Javie
źródło