3
public int difftime(String string, String string2) {
        int hours;
        int min = 0;
        int days;
        long difference ;
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
            Date date1 = simpleDateFormat.parse("08:00 AM");
            Date date2 = simpleDateFormat.parse("04:00 PM");

             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);
            return min;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return min;
    }

This is my function to get time difference in the form of minutes but it give always zero. I don't know where i did mistake please tell me where am doing mistake. I want result in the form of minutes.

innoSPG
  • 4,588
  • 1
  • 29
  • 42
Research Development
  • 884
  • 1
  • 19
  • 39

5 Answers5

5

First of all, you did very basic mistake. For 12-hour system, you should use hh not HH. And I am amazed to see that, none of the answers correct this mistake.

Secondly, you're not considering Date rather only depending upon the time. So 08:00AM and 04:00PM doesn't have any minute difference. It only have 8 hours difference.

So, now in your case, you have to calculate minutes based on two scenarios i-e one from Hours and one when there is minutes difference. I correct your code. Please Check it as this is working as expected at my end.

public long diffTime() {
    long min = 0;
    long difference ;
    try {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm aa"); // for 12-hour system, hh should be used instead of HH
        // There is no minute different between the two, only 8 hours difference. We are not considering Date, So minute will always remain 0
        Date date1 = simpleDateFormat.parse("08:00 AM");
        Date date2 = simpleDateFormat.parse("04:00 PM");

        difference = (date2.getTime() - date1.getTime()) / 1000;
        long hours = difference % (24 * 3600) / 3600; // Calculating Hours
        long minute = difference % 3600 / 60; // Calculating minutes if there is any minutes difference
        min = minute + (hours * 60); // This will be our final minutes. Multiplying by 60 as 1 hour contains 60 mins
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return min;
}
Yasir Tahir
  • 790
  • 1
  • 11
  • 31
2

Mulitply be 24 more to get hours and than MINUTES

1> parse exception

2> you are not getting difference in MINUTE so do that you need to change

Change ,

hours = (int) ((difference - (1000 * 60 * 60 * 24 * days)) / (1000 * 60 * 60)); 

TO

hours = (int) ((difference - (1000 * 60 * 60 * 24 * days)) / (1000 * 60 * 60 * 24));

check

public int difftime() {
        int hours;
        int min = 0;
        int days;
        long difference;
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
            Date date1 = simpleDateFormat.parse("08:00 AM");
            Date date2 = simpleDateFormat.parse("04:00 PM");

            difference = date2.getTime() - date1.getTime();
            days = (int) (difference / (1000 * 60 * 60 * 24));
            hours = (int) ((difference - (1000 * 60 * 60 * 24 * days)) / (1000 * 60 * 60 * 24));
            min = (int) (difference - (1000 * 60 * 60 * 24 * days) - (1000 * 60 * 60 * hours)) / (1000 * 60);
            hours = (hours < 0 ? -hours : hours);
            Log.e("======= Hours", " :: " + hours);
            Log.e("======= min", " :: " + min);
            return min;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return min;
    }
Amit Vaghela
  • 22,772
  • 22
  • 86
  • 142
0

a simple example hope it will help you :)

SimpleDateFormat dfDate  = new SimpleDateFormat("HH:mm a");
java.util.Date d = null;
java.util.Date d1 = null;
Calendar cal = Calendar.getInstance();
try {
        d = dfDate.parse("08:00 AM");
        d1 = dfDate.parse("04:00 PM");
    } catch (java.text.ParseException e) {
        e.printStackTrace();
    }

long diffInTime = (long) ((d.getTime() - d1.getTime())/ (1000 * 60 * 60 * 
24));
long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInTime); <--- converting 
the result in minutes
System.out.println(minutes);
Nowshad
  • 294
  • 1
  • 14
0

Try using the TimeUnit class in java. This will convert the long value in Millis that you recieve into hours and mins.

    int hours;
    int min;
    long difference ;

    try {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
        Date date1 = simpleDateFormat.parse("08:00 AM");
        Date date2 = simpleDateFormat.parse("04:00 PM");

        difference = date2.getTime() - date1.getTime();

        hours = Long.valueOf(TimeUnit.MILLISECONDS.toHours(difference)).intValue();
        min = Long.valueOf(TimeUnit.MILLISECONDS.toMinutes(difference)).intValue();

        hours = (hours < 0 ? -hours : hours);
        Log.i("======= Hours", " :: " + hours);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Sean Keane
  • 108
  • 1
  • 8
0

you can try this it works for me. In this example, I calculate the difference between hours and minutes and I ignore the day and the year fields.

public static Date getDate(int hour, int minute) {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 0);
    cal.set(Calendar.MONTH, 0);
    cal.set(Calendar.DAY_OF_MONTH, 0);
    cal.set(Calendar.HOUR_OF_DAY, hour);
    cal.set(Calendar.MINUTE, minute);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
}

public static int getDiff(Date date1, Date date2){
    /* this function get the difference between date1 and date2
     * represented in minutes
     * assume that the formate is HH:MM */
    int min = 0;
    int hr = 0;
    if (date1.getMinutes() >= date2.getMinutes()){
        min = date1.getMinutes() - date2.getMinutes();
    }else{
        min = date1.getMinutes() + ( 60 - date2.getMinutes());
        hr = -1;
    }
    if ((date1.getHours()+hr) >= date2.getHours()){
        hr += date1.getHours() - date2.getHours();
    }else{
        hr += date1.getHours() + (24 - date2.getHours());
    }
    return min + (hr * 60);
}

the first function to create Date and the second to get the difference

then you can get the difference like below

Date currentTime = Calendar.getInstance().getTime();
Date secondTime = getDate(11,5);    this will be 11:05
int diff = getDiff(secondTime ,currentTime);

diff will represent the number of minutes you will spend between the current time till you reach the secondTime.

Momen Ali
  • 21
  • 6