I think this is what you are looking for:
String timeValue = "2015-10-28T18:37:04.899+05:30"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); try { Calendar startCalendar = Calendar.getInstance(); startCalendar.setTime(sdf.parse(timeValue)); if (startCalendar.get(Calendar.MINUTE) < 30) { startCalendar.set(Calendar.MINUTE, 30); } else { startCalendar.add(Calendar.MINUTE, 30); // overstep hour and clear minutes startCalendar.clear(Calendar.MINUTE); } Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(startCalendar.getTime()); // if you want dates for whole next day, uncomment next line //endCalendar.add(Calendar.DAY_OF_YEAR, 1); endCalendar.add(Calendar.HOUR_OF_DAY, 24 - startCalendar.get(Calendar.HOUR_OF_DAY)); endCalendar.clear(Calendar.MINUTE); endCalendar.clear(Calendar.SECOND); endCalendar.clear(Calendar.MILLISECOND); SimpleDateFormat slotTime = new SimpleDateFormat("hh:mma"); SimpleDateFormat slotDate = new SimpleDateFormat(", dd/MM/yy"); while (endCalendar.after(startCalendar)) { String slotStartTime = slotTime.format(startCalendar.getTime()); String slotStartDate = slotDate.format(startCalendar.getTime()); startCalendar.add(Calendar.MINUTE, 30); String slotEndTime = slotTime.format(startCalendar.getTime()); Log.d("DATE", slotStartTime + " - " + slotEndTime + slotStartDate); } } catch (ParseException e) { // date in wrong format }
I need to note that this code ignores the time zone, but it seems you do not need it. Output Example:
cz.skywall.stack D/DATE: 07:00PM - 07:30PM, 28/10/15 cz.skywall.stack D/DATE: 07:30PM - 08:00PM, 28/10/15 cz.skywall.stack D/DATE: 08:00PM - 08:30PM, 28/10/15 cz.skywall.stack D/DATE: 08:30PM - 09:00PM, 28/10/15 cz.skywall.stack D/DATE: 09:00PM - 09:30PM, 28/10/15 cz.skywall.stack D/DATE: 09:30PM - 10:00PM, 28/10/15 cz.skywall.stack D/DATE: 10:00PM - 10:30PM, 28/10/15 cz.skywall.stack D/DATE: 10:30PM - 11:00PM, 28/10/15 cz.skywall.stack D/DATE: 11:00PM - 11:30PM, 28/10/15 cz.skywall.stack D/DATE: 11:30PM - 12:00AM, 28/10/15
As I mentioned in the code, you can generate slots for the whole next day using the line uncommenting endCalendar.add(Calendar.DAY_OF_YEAR, 1); .
source share