I have two string variables such as StartTime and EndTime. I need to Calculate the TotalTime by subtracting the EndTime with StartTime.
The Format of StartTime and E
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
Note: Corrected code as below which provide by Chirag Raval because in code which Chirag provided had some issues when we try to find time from 22:00 to 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);
Result will be: Hours: 9, Mins: 0
I should like to contribute the modern answer.
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
String startTime = "08:00 AM";
String endTime = "04:00 PM";
LocalTime start = LocalTime.parse(startTime, timeFormatter);
LocalTime end = LocalTime.parse(endTime, timeFormatter);
Duration diff = Duration.between(start, end);
long hours = diff.toHours();
long minutes = diff.minusHours(hours).toMinutes();
String totalTimeString = String.format("%02d:%02d", hours, minutes);
System.out.println("TotalTime in Hours and Mins Format is " + totalTimeString);
The output from this snippet is:
TotalTime in Hours and Mins Format is 08:00
(Tested on Java 1.7.0_67 with ThreeTen Backport.)
The datetime classes used in the other answers — SimpleDateFormat
, Date
, DateFormat
and Calendar
— are all long outdated and poorly designed. Possibly worse, one answer is parsing and calculating “by hand”, without aid from any library classes. That is complicated and error-prone and never recommended. Instead I am using java.time, the modern Java date and time API. It is so much nicer to work with.
Yes, java.time works nicely on older and newer Android devices. It just requires at least Java 6.
org.threeten.bp
with subpackages: org.threeten.bp.Duration
, org.threeten.bp.LocalTime
and org.threeten.bp.format.DateTimeFormatter
.java.time
was first described.java.time
to Java 6 and 7 (ThreeTen for JSR-310).String mStrDifferenceTime =compareTwoTimeAMPM("11:06 PM","05:07 AM");
Log.e("App---Time ", mStrDifferenceTime+" Minutes");
public static String getCurrentDateUsingCalendar() {
Date mDate = new Date(); // to get the date
@SuppressLint("SimpleDateFormat") SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
return mSimpleDateFormat.format(mDate.getTime());
}
public static String getNextDateUsingCalendar() {
Calendar mCalendar = Calendar.getInstance();
mCalendar.add(Calendar.DAY_OF_YEAR, 1);
Date mStrTomorrow = mCalendar.getTime();
@SuppressLint("SimpleDateFormat") DateFormat mDateFormat = new SimpleDateFormat("dd-MM-yyyy");
return mDateFormat.format(mStrTomorrow);
}
public static String compareTwoTimeAMPM(String mStrStartTime, String mStrEndTime) {
String mStrCompareStartTime[] = mStrStartTime.split(" ");
String mStrCompareEndTime[] = mStrEndTime.split(" ");
int mIStartTime = Integer.parseInt(mStrCompareStartTime[0].replace(":", ""));
int mIEndTime = Integer.parseInt(mStrCompareEndTime[0].replace(":", ""));
String mStrToday = "";
String mStrTomorrow = "";
if (mIStartTime < mIEndTime && mStrCompareStartTime[1].equals("PM") && mStrCompareEndTime[1].equals("PM")) {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getCurrentDateUsingCalendar();
} else if (mIStartTime < mIEndTime && mStrCompareStartTime[1].equals("AM") && mStrCompareEndTime[1].equals("AM")) {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getCurrentDateUsingCalendar();
} else if (mIStartTime > mIEndTime && mStrCompareStartTime[1].equals("PM") && mStrCompareEndTime[1].equals("PM")) {
String mStrTime12[] = mStrCompareStartTime[0].split(":");
if (mStrTime12[0].equals("12")) {
mStrToday = getNextDateUsingCalendar();
mStrTomorrow = getNextDateUsingCalendar();
} else {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getNextDateUsingCalendar();
}
} else if (mIStartTime > mIEndTime && mStrCompareStartTime[1].equals("AM") && mStrCompareEndTime[1].equals("AM")) {
String mStrTime12[] = mStrCompareStartTime[0].split(":");
if (mStrTime12[0].equals("12")) {
mStrToday = getNextDateUsingCalendar();
mStrTomorrow = getNextDateUsingCalendar();
} else {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getNextDateUsingCalendar();
}
} else if (mStrCompareStartTime[1].equals("PM") && mStrCompareEndTime[1].equals("AM")) {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getNextDateUsingCalendar();
} else if (mStrCompareStartTime[1].equals("AM") && mStrCompareEndTime[1].equals("PM")) {
mStrToday = getCurrentDateUsingCalendar();
mStrTomorrow = getCurrentDateUsingCalendar();
}
@SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm aa");
String mStrDifference = "";
try {
Date date1 = simpleDateFormat.parse(mStrToday + " " + mStrStartTime);
Date date2 = simpleDateFormat.parse(mStrTomorrow + " " + mStrEndTime);
mStrDifference = differenceDatesAndTime(date1, date2);
} catch (ParseException e) {
e.printStackTrace();
}
return mStrDifference;
}
public static String differenceDatesAndTime(Date mDateStart, Date mDateEnd) {
long different = mDateEnd.getTime() - mDateStart.getTime();
long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;
long elapsedDays = different / daysInMilli;
different = different % daysInMilli;
long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;
long elapsedMinutes = different / minutesInMilli;
long minutes = elapsedHours * 60 + elapsedMinutes;
long result = elapsedDays * 24 * 60 + minutes;
if (0 > result) {
result = result + 720; //result is minus then add 12*60 minutes
}
return result + "";
}
My output is E/App---Time: 361 Minutes
Please try this....
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 below code.
// suppose time format is into ("hh:mm a") format
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm a");
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);
Output - Hours :: 8