2013-05-15 11 views
27

Potrzebuję uzyskać różnicę między dwoma datami przy użyciu Java. Potrzebuję mojego wyniku za miesiące.Uzyskaj różnicę między dwoma datami w miesiącach przy użyciu Javy

przykład:

data rozpoczecia = 03.04.2013 DataZakończenia = 03.05.2013 wynik powinien wynosić 1

jeśli przerwa jest

data rozpoczecia = 2013-04-03 enddate = 2014-04-03 Wynik powinien wynosić 12

Za pomocą następującego kodu mogę uzyskać wyniki w dniach. Jak mogę dostać w miesiącach?

Date startDate = new Date(2013,2,2); 
Date endDate = new Date(2013,3,2); 
int difInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000*60*60*24)); 
+0

Czy można korzystać z zewnętrznych bibliotek, takich jak JodaTime? – Keppil

+3

Jeśli używasz JodaTime, istnieje podobne pytanie z prostą odpowiedzią tutaj: http://stackoverflow.com/questions/6844061/calculate-month-difference-in-joda-time – maba

+1

Co chcesz między 2013-01- 31 i 2013-02-01? 0 miesięcy lub 1 miesiąc? –

Odpowiedz

88

Jeśli nie można używać JodaTime, można wykonać następujące czynności:

Calendar startCalendar = new GregorianCalendar(); 
startCalendar.setTime(startDate); 
Calendar endCalendar = new GregorianCalendar(); 
endCalendar.setTime(endDate); 

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); 
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); 

Zauważ, że jeśli daty są 31.01.2013 i 01.02.2013, masz dystans 1 miesiąca w ten sposób, który może, ale nie musi być tym, co chcesz.

+0

+1 To będzie działać dla każdego roku różnica. (np.) 'Startdate = 2014-04-03 enddate = 2013-04-03 Wynik powinien wynosić 12' zgodnie z OP. ** AKTUALIZACJA ** Tak, dostanie on 1 miesiąc różnicy, nawet jeśli jest to różnica tylko 1 dzień, ale OP wyszczególnił, że chce go w miesiącach. Miesiąc nie jest prawdziwą różnicą między tymi datami, ale 0 nie ma większej różnicy. Do tego, jeśli chcesz 0 miesięcy, możesz zrobić coś w stylu 'Math.floor' lub coś w tym stylu. – DaGLiMiOuX

+0

@Etienne Miret: Otrzymuję komunikat o błędzie. Metoda startCalendar (int) jest niezdefiniowana dla typu – ashu

+1

@ashu 'startCalendar (int)' nie jest metodą. Możliwe, że masz błąd w składni. Musisz zrobić "startCalendar.setTime (int)'. W tym przypadku 'int' to' startDate.getTime() '. Więc musisz mieć w swoim kodzie to 'startCalendar.setTime (startDate.getTime()) ' – DaGLiMiOuX

4

Możesz użyć biblioteki czasu Joda dla Java. Znacznie łatwiej byłoby obliczyć różnicę czasową między datami, w których się znajduje.

przykładowy fragment do czasu Diff:

Days d = Days.daysBetween(startDate, endDate); 
int days = d.getDays(); 
+0

FYI, projekt Joda-Time jest teraz w trybie konserwacji, a jego zespół doradza przy migracji do klas java.time. –

-4

Można spróbować to:

Calendar sDate = Calendar.getInstance(); 
Calendar eDate = Calendar.getInstance(); 
sDate.setTime(startDate.getTime()); 
eDate.setTime(endDate.getTime()); 
int difInMonths = sDate.get(Calendar.MONTH) - eDate.get(Calendar.MONTH); 

myślę, że to powinno działać. Użyłem czegoś podobnego do mojego projektu i zadziałało to, czego potrzebowałem (rok różnicy). Dostajesz Calendar od Date i właśnie dostaję różnicę miesiąca.

+10

Nie działa, jeśli dwie daty należą do różnych lat. –

+0

@EtienneMiret To prawda. To będzie działać tylko dla dat w tym samym roku. – DaGLiMiOuX

Powiązane problemy