Blaze Tama
Blaze Tama

Reputation: 10948

Calculate different seconds between two Timepickers

I tried to follow the suggestion here :

android calculating time difference for setting alarm

So this is what i did :

    Calendar start = Calendar.getInstance();
    start.set(Calendar.HOUR_OF_DAY, timeSchedule.getCurrentHour());
    start.set(Calendar.MINUTE, timeSchedule.getCurrentMinute());

    Calendar end = Calendar.getInstance();
    end.set(Calendar.HOUR_OF_DAY, toTime.getCurrentHour());
    end.set(Calendar.MINUTE, toTime.getCurrentMinute());

    long startMillis = start.getTimeInMillis();
    long endMillis = end.getTimeInMillis();
    long diffSec = TimeUnit.MILLISECONDS.toSeconds(endMillis - startMillis);

Where toTime and timeSchedule is TimePicker. However, the result is incorrect. I suspect its because the AM and PM.

Please kindly help me, Thanks very much for your help.

UPDATE

Thanks to @Raghunandan, this is my current code :

    Calendar start = Calendar.getInstance();
    start.set(Calendar.HOUR, timeSchedule.getCurrentHour());
    start.set(Calendar.MINUTE, timeSchedule.getCurrentMinute());

    if (start.get(Calendar.AM_PM) == Calendar.AM)
        start.set(Calendar.AM_PM, Calendar.AM);
    else
        start.set(Calendar.AM_PM, Calendar.PM);

    Calendar end = Calendar.getInstance();
    end.set(Calendar.HOUR, toTime.getCurrentHour());
    end.set(Calendar.MINUTE, toTime.getCurrentMinute());

    if (end.get(Calendar.AM_PM) == Calendar.AM)
        end.set(Calendar.AM_PM, Calendar.AM);
    else
        end.set(Calendar.AM_PM, Calendar.PM);

    long startMillis = start.getTimeInMillis();
    long endMillis = end.getTimeInMillis();
    long diffSec = TimeUnit.MILLISECONDS.toSeconds(endMillis - startMillis);

Now the result is true if both of Timpickers are AM or PM. However, the result will be false (<0 or minus value) if, for example the user set 7 PM to 1 AM. What should i do?

Upvotes: 0

Views: 114

Answers (1)

Raghunandan
Raghunandan

Reputation: 133560

Try

Calendar start = Calendar.getInstance();
start.set(Calendar.HOUR, 6);
start.set(Calendar.MINUTE, 30);
start.set(Calendar.AM_PM,Calendar.AM);

Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR, 6); // 12 hour format
end.set(Calendar.MINUTE, 30);
end.set(Calendar.AM_PM,Calendar.PM); // AM or PM

long startMillis = start.getTimeInMillis();
long endMillis = end.getTimeInMillis();
long diffSec = TimeUnit.MILLISECONDS.toSeconds(endMillis) - TimeUnit.MILLISECONDS.toSeconds(startMillis) ;
long diffHour = TimeUnit.MILLISECONDS.toHours(endMillis) - TimeUnit.MILLISECONDS.toHours(startMillis) // 12 hour diff

Use Calendar.Hour for 12 hour format and Calendar.HOUR_OF_DAY fro 24 hour format.

http://developer.android.com/reference/java/util/Calendar.html#AM_PM

http://developer.android.com/reference/java/util/Calendar.html#HOUR

Edit:

7 pm to 1 am next day

Calendar start = Calendar.getInstance();
start.set(Calendar.HOUR, 7);
start.set(Calendar.MINUTE, 30);
start.set(Calendar.AM_PM,Calendar.PM);

Calendar end = Calendar.getInstance();
int day = (start.get(Calendar.DAY_OF_MONTH)+1);
end.set(Calendar.DAY_OF_MONTH,day);
end.set(Calendar.HOUR, 1);
end.set(Calendar.MINUTE, 30);
end.set(Calendar.AM_PM,Calendar.AM);

long startMillis = start.getTimeInMillis();
long endMillis = end.getTimeInMillis();
long diffSec = TimeUnit.MILLISECONDS.toSeconds(endMillis) - TimeUnit.MILLISECONDS.toSeconds(startMillis) ;
long diffHour = TimeUnit.MILLISECONDS.toHours(endMillis) - TimeUnit.MILLISECONDS.toHours(startMillis) ;

Edit 2:

Calendar start = Calendar.getInstance();
start.set(Calendar.HOUR_OF_DAY, 21);
start.set(Calendar.MINUTE, 30);

if (start.get(Calendar.AM_PM) == Calendar.AM)
        start.set(Calendar.AM_PM, Calendar.AM);
else
        start.set(Calendar.AM_PM, Calendar.PM);

Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, 4);
end.set(Calendar.MINUTE, 30);
int day = (start.get(Calendar.DAY_OF_MONTH)+1);
end.set(Calendar.DAY_OF_MONTH,day);

if (end.get(Calendar.AM_PM) == Calendar.AM)
        end.set(Calendar.AM_PM, Calendar.AM);
else
        end.set(Calendar.AM_PM, Calendar.PM);

long startMillis = start.getTimeInMillis();
long endMillis = end.getTimeInMillis();
long diffSec = TimeUnit.MILLISECONDS.toSeconds(endMillis - startMillis);
long diffHour = TimeUnit.MILLISECONDS.toHours(endMillis) - TimeUnit.MILLISECONDS.toHours(startMillis) ;

Toast.makeText(this,""+diffHour, Toast.LENGTH_LONG).show();

Note: You may also require a day picker.

Upvotes: 1

Related Questions