2015-10-29 7 views
5

ho tempo in seguito formatoCrea 30 min slot da certa data e l'ora

2015-10-28T18: 37: 04.899 + 05: 30

devo creare slot in formato qui sotto

11:00-12:00 28/10/15

12:00-13:00 28/10/15

13:00-14:00 28/10/15

String timeValue = "2015-10-28T18:37:04.899+05:30"; 
     StringTokenizer stringTokenizer = new StringTokenizer(timeValue,"T"); 
     String dateValue = stringTokenizer.nextElement().toString(); 
     String endDateValue = "2015-10-30"; 
     String restString= stringTokenizer.nextElement().toString(); 
     StringTokenizer secondTokeniser = new StringTokenizer(restString,":"); 
     String hours = secondTokeniser.nextElement().toString(); 
     String minutes = secondTokeniser.nextElement().toString(); 
     hours = String.valueOf(Integer.parseInt(hours) + 2); 
     if (Integer.parseInt(minutes) > 30){ 
      minutes = "00"; 
     }else{ 
      minutes = "30"; 
     } 

     String amOrPm = null; 
     if(Integer.parseInt(hours) < 12){ 
      amOrPm = "AM"; 
     }else{ 
      amOrPm = "PM"; 
      hours = String.valueOf(getHoursValue(Integer.parseInt(hours))); 
     } 
     String time1 = hours + ":" + minutes + " " + amOrPm; 
     String time2 = "12" + ":" + "00" + " AM "; 
     String format = "yyyy-mm-dd hh:mm a"; 


     SimpleDateFormat sdf = new SimpleDateFormat(format); 

     try { 
      Date dateObj1 = sdf.parse(dateValue + " " + time1); 
      Date dateObj2 = sdf.parse(endDateValue + " " + time2); 
      Logger.d(TAG, "Date Start: " + dateObj1); 
      Logger.d(TAG, "Date End: " + dateObj2); 
      long dif = dateObj1.getTime(); 
      while (dif < dateObj2.getTime()) { 
       Date slot = new Date(dif); 
       Log.d(TAG, "Hour slot = " + slot); 
       dif += 1800000; 
      } 
     }catch (ParseException ex){ 
      ex.printStackTrace(); 
     } 

Con il codice di cui sopra io sono sempre al di sotto di uscita

mer 28 gen 20:00:00 IST 2015

mer 28 gennaio 20:30:00 IST 2015

mer 28 gennaio 21:00:00 IST 2015

mer 28 gennaio 21:30:00 IST 2015

mer 28 gennaio 22:00:00 IST 2015

Mer 28 Gen 22: 30:00 IST 2015

che è in formato 24 ore

voglio il modello che segue mettere fuori

11:00-12:00 28/10/15

12:00-13:00 28/10/15

13:00-14:00 28/10/15

Can per favore qualcuno mi aiuti per quanto riguarda questo

+0

Io davvero non capisco il punto di downvote, è diventato una tendenza qui – Naga

+3

persone forse solo cattive che downvote senza lasciare un motivo –

+0

sì credo di cui godono bro – Naga

risposta

1

È possibile utilizzare il seguente, si prega di notare che per mese si utilizza MM anziché mm. Aggiungo un semplice getHoursValue poiché non conosco il tuo.

Spero che questo aiuti!

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     displayTimeSlots(); 
    } 

    private int getHoursValue(int hours){ 
     return hours - 12; 
    } 

    private void displayTimeSlots(){ 
     String timeValue = "2015-10-28T18:37:04.899+05:30"; 
     StringTokenizer stringTokenizer = new StringTokenizer(timeValue,"T"); 
     String dateValue = stringTokenizer.nextElement().toString(); 
     String endDateValue = "2015-10-30"; 
     String restString= stringTokenizer.nextElement().toString(); 
     StringTokenizer secondTokeniser = new StringTokenizer(restString,":"); 
     String hours = secondTokeniser.nextElement().toString(); 
     String minutes = secondTokeniser.nextElement().toString(); 
     hours = String.valueOf(Integer.parseInt(hours) + 2); 
     if (Integer.parseInt(minutes) > 30){ 
      minutes = "00"; 
     }else{ 
      minutes = "30"; 
     } 

     String amOrPm; 
     if(Integer.parseInt(hours) < 12){ 
      amOrPm = "AM"; 
     }else{ 
      amOrPm = "PM"; 
      hours = String.valueOf(getHoursValue(Integer.parseInt(hours))); 
     } 
     String time1 = hours + ":" + minutes + " " + amOrPm; 
     String time2 = "12" + ":" + "00" + " AM "; 
     String format = "yyyy-MM-dd hh:mm a"; 

     SimpleDateFormat sdf = new SimpleDateFormat(format); 

     try { 
      Date dateObj1 = sdf.parse(dateValue + " " + time1); 
      Date dateObj2 = sdf.parse(endDateValue + " " + time2); 
      Log.d("TAG", "Date Start: " + dateObj1); 
      Log.d("TAG", "Date End: " + dateObj2); 
      long dif = dateObj1.getTime(); 
      while (dif < dateObj2.getTime()) { 
       Date slot1 = new Date(dif); 
       dif += 3600000; 
       Date slot2 = new Date(dif); 
       dif += 3600000; 
       SimpleDateFormat sdf1 = new SimpleDateFormat("hh:mm a"); 
       SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm a, dd/MM/yy"); 
       Log.d("TAG", "Hour slot = " + sdf1.format(slot1) + " - " + sdf2.format(slot2)); 
      } 
     }catch (ParseException ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

Ecco il logcat:

11-07 14:54:02.506 24299-24299/? D/TAG: Date Start: Wed Oct 28 20:00:00 GMT+07:00 2015 
11-07 14:54:02.506 24299-24299/? D/TAG: Date End: Fri Oct 30 00:00:00 GMT+07:00 2015 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 08:00 PM - 09:00 PM, 28/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 10:00 PM - 11:00 PM, 28/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 12:00 AM - 01:00 AM, 29/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 02:00 AM - 03:00 AM, 29/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 04:00 AM - 05:00 AM, 29/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 06:00 AM - 07:00 AM, 29/10/15 
11-07 14:54:02.506 24299-24299/? D/TAG: Hour slot = 08:00 AM - 09:00 AM, 29/10/15 
11-07 14:54:02.527 24299-24299/? D/TAG: Hour slot = 10:00 AM - 11:00 AM, 29/10/15 
11-07 14:54:02.537 24299-24299/? D/TAG: Hour slot = 12:00 PM - 01:00 PM, 29/10/15 
11-07 14:54:02.537 24299-24299/com.example.timeslots D/TAG: Hour slot = 02:00 PM - 03:00 PM, 29/10/15 
11-07 14:54:02.556 24299-24299/com.example.timeslots D/TAG: Hour slot = 04:00 PM - 05:00 PM, 29/10/15 
11-07 14:54:02.566 24299-24299/com.example.timeslots D/TAG: Hour slot = 06:00 PM - 07:00 PM, 29/10/15 
11-07 14:54:02.566 24299-24299/com.example.timeslots D/TAG: Hour slot = 08:00 PM - 09:00 PM, 29/10/15 
11-07 14:54:02.566 24299-24299/com.example.timeslots D/TAG: Hour slot = 10:00 PM - 11:00 PM, 29/10/15 
+0

Prego, dovresti testare prima di accettare. Tuttavia, il titolo della domanda 'Crea spazi di 30 minuti ', corpo della domanda' intervalli di 1 ora'. Quindi, se vuoi 30 minuti, puoi sostituire '3600000' con' 1800000' :) – BNK

+0

sì, sostituirò con 180000. Grazie ancora Sir – Naga

+1

Ho testato la tua risposta, che funziona anche – Naga

0

è possibile ottenere il primo intervallo di tempo e simili si possono trovare altri due restanti tuo intervallo di tempo.

String time ="2015-10-28T18:37:04.899+05:30"; 

     try { 
     Date d= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(time); 
     SimpleDateFormat dateFormat1=new SimpleDateFormat("hh:mm aaa dd/MM/yy"); 
     String date =dateFormat1.format(d); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(dateFormat1.parse(date)); 
     calendar.add(Calendar.HOUR, 1); 

     String one=dateFormat1.format(calendar.getTime()); 
     String[] strings=date.split(" "); 
     one=(strings[0]+strings[1]+"-"+one); 

     System.out.println("Time here "+one); 

     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
4

penso, questo è qualcosa che si sta cercando:

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 
} 

ho bisogno di menzionare, questo codice ignorare il fuso orario, ma sembra che non ne ha bisogno. Uscita Esempio:

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 

Come ho già detto nel codice, è possibile generare slot per tutto il giorno successivo decommentando linea endCalendar.add(Calendar.DAY_OF_YEAR, 1);.

+0

la tua soluzione sembra pulita e ordinata rispetto ad altri, accetterà una volta che testerò il codice. Grazie mille per la risposta – Naga

+0

risposta perfetta per tutto lo scenario, ho testato questo codice per tutti gli scenari compreso 31 DIC 2015 e fine del mese e fine dell'anno, funziona magnificamente, ho fatto qualche ritocco per riempire completamente il mio requisito , grazie mille – Naga

+0

La sua generazione di fasce orarie perfettamente. Ma ho un piccolo problema, voglio generare slot dalle 12 alle 23 dello stesso giorno ma è a partire dalle 12:30 del mattino. da questo input "2016-11-03 00:00:00". –

Problemi correlati