Search code examples
androidtimeandroid-timepicker

Android: Setting time in time picker with the time shown in text view


In my app, I am showing time in text view as 07:00 PM. On click of the text view, a time picker dialog pops up, In that time picker, I have to show exactly the same time as what is appearing in textview. But, I am not getting how to do that.

CODE

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm a");
        //int hr = 0;
        Date date = null;
        try 
        {
            date = sdf.parse(resDateArray[3]);
        } 
        catch (ParseException e) {
            e.printStackTrace();
        }
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //tp is reference variable for time picker

        tp.setCurrentHour(calendar.get(Calendar.HOUR));
        tp.setCurrentMinute(calendar.get(Calendar.MINUTE));

        }//else

Solution

  • You should use a SimpleDateFormat to get a Date object from your String. Then just call

    picker.setCurrentHour(date.getHours())
    

    and

    picker.setCurrentMinute(date.getMinutes())
    

    Since the Date object is deprecated, you should use a Calendar instead of it. You can instantiate a Calendar this way:

    Calendar c = Calendar.getInstance();
    c.setTime(date);
    picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
    picker.setCurrentMinute(c.get(Calendat.MINUTE));
    

    Edit: the complete code:

    import java.util.Date;
    import java.text.SimpleDateFormat; //Don't use "android.icu.text.SimpleDateFormat"
    import java.text.ParseException; //Don't use "android.net.ParseException"
    
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
    Date date = null;
    try {
        date = sdf.parse("07:00");
    } catch (ParseException e) {
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    
    TimePicker picker = new TimePicker(getApplicationContext());
    picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
    picker.setCurrentMinute(c.get(Calendar.MINUTE));