Reputation: 10948
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
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