Вычислить разницу между двумя раз в Android

У меня есть две строковые переменные, такие как StartTime и EndTime. Мне нужно вычислить TotalTime, вычитая EndTime с помощью StartTime.

Формат StartTime и EndTime выглядит следующим образом:

StartTime = "08:00 AM"; EndTime = "04:00 PM"; 

Формат Total Time в часах и минутах. Как рассчитать это в Android?

Попробуйте под кодом.

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); date1 = simpleDateFormat.parse("08:00 AM"); date2 = simpleDateFormat.parse("04:00 PM"); long difference = date2.getTime() - date1.getTime(); days = (int) (difference / (1000*60*60*24)); hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60); hours = (hours < 0 ? -hours : hours); Log.i("======= Hours"," :: "+hours); 

Выход – Часы: 8

Посмотрите DateFormat , вы можете использовать его для синтаксического анализа ваших строк с помощью метода синтаксического анализа (String source), и вы можете легко манипулировать объектом Dates, чтобы получить то, что вы хотите.

 DateFormat df = DateFormat.getInstance(); Date date1 = df.parse(string1); Date date2 = df.parse(string2); long difference = date1.getTime() - date2.getTime(); days = (int) (difference / (1000*60*60*24)); hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60); String diffHours = df.format(hours); 

Для разницы в дате

 Date myDate = new Date(difference); 

Чтобы показать дату:

 String diff = df.format(myDate); 

Примечание. Исправленный код, приведенный ниже, который предоставляет Чираг Раваль, поскольку в коде, который предоставил Чираг, были некоторые проблемы, когда мы пытались найти время с 22:00 до 07:00.

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); Date startDate = simpleDateFormat.parse("22:00"); Date endDate = simpleDateFormat.parse("07:00"); long difference = endDate.getTime() - startDate.getTime(); if(difference<0) { Date dateMax = simpleDateFormat.parse("24:00"); Date dateMin = simpleDateFormat.parse("00:00"); difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime()); } int days = (int) (difference / (1000*60*60*24)); int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60); Log.i("log_tag","Hours: "+hours+", Mins: "+min); 

Результат будет: Часы: 9, Мин.: 0

Пожалуйста, попробуйте это ….

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); try { date1 = simpleDateFormat.parse("08:00 AM"); } catch (ParseException e) { e.printStackTrace(); } try { date2 = simpleDateFormat.parse("04:00 PM"); } catch (ParseException e) { e.printStackTrace(); } long difference = date2.getTime() - date1.getTime(); int days = (int) (difference / (1000 * 60 * 60 * 24)); int hours = (int) ((difference - (1000 * 60 * 60 * 24 * days)) / (1000 * 60 * 60)); int min = (int) (difference - (1000 * 60 * 60 * 24 * days) - (1000 * 60 * 60 * hours)) / (1000 * 60); hours = (hours < 0 ? -hours : hours); Log.i("======= Hours", " :: " + hours); 
 Try simple piece of code using For 24 hour time StartTime = "10:00"; EndTime = "13:00"; here starthour=10 and end hour=13 if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString())) { Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show(); } else { if (starthour > endhour) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else if (starthour == endhour) { if (startmin > endmin) { Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show(); } else{ tvalid = "True"; } } else { // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show(); tvalid = "True"; } } same for date also