2016-03-24 3 views
-1

Я новичок в java. У меня есть небольшая путаница относительно арифметики даты в java. Я следующий сценарий, где я хочу, чтобы найти различие между двумя датами: -Найти разницу между датами в java

java.util.Date objDt1 = getDate1FromSrc1(); // I am obtaining it from src1 
java.util.Date objDt2 = getDate2FromOtherSrc(); // I am getting dt2 by other way. 

Теперь я хочу, чтобы найти разницу между двумя датами и выходом должен быть другим объектом даты.

Итак, я написал следующий код: -

Calendar objCal1  = Calendar.getInstance(); 
Calendar objCal2  = Calendar.getInstance(); 
objCal1.setTime(objDt1); 
objCal2.setTime(objDt2); 

objCal1.add(Calendar.DAY_OF_MONTH, -objCal2.get(Calendar.DAY_OF_MONTH)); 
objCal1.add(Calendar.MONTH,   -objCal2.get(Calendar.MONTH)); 
objCal1.add(Calendar.YEAR,   -objCal2.get(Calendar.YEAR)); 
objCal1.add(Calendar.HOUR_OF_DAY, -objCal2.get(Calendar.HOUR_OF_DAY)); 
objCal1.add(Calendar.MINUTE,  -objCal2.get(Calendar.MINUTE)); 
objCal1.add(Calendar.SECOND,  -objCal2.get(Calendar.SECOND)); 

java.util.Date objDiff = objCal1.getTime(); 

Но, я получаю некоторые результаты странные. Например. Если objDt1 равен "02/22/2016 09:00:00", а objDt2 - "02/22/2016 11:00:00", тогда я ожидаю, что objDiff будет "02:00:00" в качестве вывода, который я не получаю.

Можете ли вы предложить мне, что не так, что я здесь делаю и как правильно подойти к этой проблеме?

Заранее спасибо.

+0

Работа с датами трудна. Эти годы не просто исчезнут. Попробуйте 'Period' в новых классах Java 8 date, если сможете. –

+0

@EvanKnowles, я не могу использовать java 8, я использую java7. –

+0

@ user2393267 Для Java 7 вы можете использовать проект [ThreeTen-Backport] (http://www.threeten.org/threetenbp/), который является основным компонентом функции java.time. Построены теми же людьми. Или используйте [Joda-Time] (http://www.joda.org/joda-time/), основу, которая вдохновила java.time (также созданная теми же людьми). Старые классы с датой и временем действительно настолько плохи, что вам следует избегать их. –

ответ

1

Для того чтобы найти разницу между двумя датами, вы можете просто преобразовать его долго следующим образом:

java.util.Date objDt1 = getDate1FromSrc1(); 
java.util.Date objDt2 = getDate2FromOtherSrc(); 

long date1 = objDt1.getTime(); 
long date2 = objDt2.getTime(); 
System.out.println("Difference (In Seconds): " + (date2 - date1)/1000); 

Если вы хотите, эта разница будет в формате HH:mm:ss, то вы можете сделать что-то вроде этого:

public static void main (String[] args) throws Exception 
{ 
    SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss"); 
    java.util.Date objDt1 = getDate1FromSrc1(); 
    java.util.Date objDt2 = getDate2FromOtherSrc(); 

    long date1 = objDt1.getTime(); 
    long date2 = objDt2.getTime(); 
    System.out.println("Difference: " + sf.format(new Date((date2 - date1)/1000))); 
} 
+0

Посмотрите на мой вопрос правильно. Я хочу разницу во времени. Я не хочу в миллисекундах. –

+0

@ user2393267 Вы можете легко форматировать его в любом формате. Проверьте обновленный ответ. – user2004685

+0

Для System.out.println ("Difference:" + objFmt11.format (новая дата (-7200000/1000))); ваш код дает неверный вывод. Я ожидаю здесь -2: 00: 00 в качестве выхода. Но это дает мне нечто странное. Можете ли вы дать объяснение тому же? –

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