2014-01-21 4 views
0

Как получить разницу между текущей датой и другой датой (java.util.Date) в годах в JavaКак получить разницу между текущей датой и другой датой (java.util.Date) в годах в Java

I есть входящий объект java.util.Date, и мне нужно получить, сколько целых лет между ними.

Я пробовал период времени Джоды, но мне нужно создать объект времени Джоды. Есть ли другой способ рассчитать эту разницу. Способ получить миллис и попытаться преобразовать его в годы не считается високосный год.

+1

Как именно вы хотите пересчитать годы? – Philipp

+0

Мой вопрос не связан с scala или как конвертировать в Joda Time –

ответ

7

Поскольку большинство методов в классе Date устарели, вы можете использовать java.util.Calendar.

Calendar firstCalendar = Calendar.getInstance(); 
firstCalendar.setTime(firstDate); //set the time as the first java.util.Date 

Calendar secondCalendar = Calender.getInstance(); 
secondCalendar.setTime(secondDate); //set the time as the second java.util.Date 

int year = Calendar.YEAR; 
int month = Calendar.MONTH; 
int difference = secondCalendar.get(year) - firstCalendar.get(year); 
if (difference > 0 && 
    (secondCalendar.get(month) < firstCalendar.get(month))) { 
    difference--; 
} 

С if утверждением я проверяю, если у нас есть даты, как June, 2011 и March, 2012 (для которых разница всего года будет 0). Конечно, я предполагаю, что secondDate - послеfirstDate.

+1

Обновлено, спасибо за примечание. :) –

1

Я бы рекомендовал использовать joda.

DateTime start = new DateTime(a); 
DateTime end = new DateTime(b); 
difference = Years.yearsBetween(start, end).getYears(); 
0

Преобразование java.util.Date к org.joda.time.DateTime объекта тривиально, так как DateTime имеет конструктор для этого:

DateTime jodaTime = new DateTime(javaDate); 

Вы можете передать их в org.joda.time.Period и вызывать getYears() на результат, чтобы получить число целых лет между этими двумя датами:

public int getYearDifference (Date begin, Date end) { 
    return new Period(new DateTime(begin), new DateTime(end)).getYears(); 
} 
2

Начиная с JDK 8, вы можете получить продолжительность между двумя датами. Еще лучше, некоторые ChronoUnits, как годы, как вы просили.

Instant t1, t2; 
... 
long years = ChronoUnit.YEARS.between(t1, t2); 

Забудьте о дате, 3-й партии банки (Joda время это здорово, но давайте делать это стандартным способом) и календари. JDK 8 - это будущее.

Обдумайте это! http://docs.oracle.com/javase/tutorial/datetime/iso/period.html

Смежные вопросы