4

I had time in TextView like 10:53 PM. When clicking on that TextView i'm showing the TextView time on TimePickerDialog but i'm unable to show the AM/PM according to the TextView. For this requirement i saw link1, link2, link3 and many more but nothing was worked for me. Any one know about this

My code

String inputTime = "10:53 PM", inputHours, inputMinutes;

inputHours = inputTime.substring(0, 2);
inputMinutes = inputTime.substring(3, 5);

tvTime.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {


        TimePickerDialog mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {

                if (selectedHour == 0) {
                    selectedHour += 12;
                    timeFormat = "AM";
                } else if (selectedHour == 12) {
                    timeFormat = "PM";
                } else if (selectedHour > 12) {
                    selectedHour -= 12;
                    timeFormat = "PM";
                } else {
                    timeFormat = "AM";
                }

                String selectedTime = selectedHour + ":" + selectedMinute + " " + timeFormat;

                tvTime.setText(selectedTime);

            }
        }, Integer.parseInt(inputHours), Integer.parseInt(inputMinutes), false);//mention true for 24 hour's time format
        mTimePicker.setTitle("Select Time");
        mTimePicker.show();

    }
});

Edit It always selecting the AM instead of PM as shown image enter image description here

Community
  • 1
  • 1
Bahu
  • 1,516
  • 2
  • 28
  • 49
  • This is because you are passing every time 12 hour formated time to TimePickerDialog as(Integer.parseInt(inputHours), Integer.parseInt(inputMinutes), false)). To resolve it you have to pass 24 hour formated time to TimePickerDialog. Check readyandroid answer. – Ready Android Nov 21 '16 at 06:04

5 Answers5

2

You don't need to get am/pm value cause hour will be always in 24h format. Timepicker display ap/pm but return 24h format value.

here hourOfDay will always be 24-hour. If you opened the dialog with is24HourView set to false, the user will not have to deal with 24-hour formatted times, but Android will convert that to a 24-hour time when it calls onTimeSet().

    Calendar calendar = Calendar.getInstance();
            TimePickerDialog timePickerDialogfrom = new TimePickerDialog(activity, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);
//Conversion for AM/PM as you are doing
            }
        }, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), false);
Ready Android
  • 3,529
  • 2
  • 26
  • 40
  • yes exactly, i already converted it (please see my code). But my question is i have to select the time in time picker as TextView – Bahu Nov 21 '16 at 05:39
  • It is not showing as per your requirement because you are always passing it 12 hour formated time. As your time is 10:53 PM so yu have to pass 22:53 to Time Picker Dialog at the time of showing. Before showing time picker dialog you have to always input 24 hour time and convert it to 12 hour for showing purpose. You can do this by using global calendar instance as per my updated answer. – Ready Android Nov 21 '16 at 05:59
  • Superb as you said i converted 12 hrs time to 24 hrs time while giving input. it's worked for me. Thank you for support.... – Bahu Nov 21 '16 at 07:46
0

Try to set your current time by timepicker.setCurrentHour(Calendar.HOUR_OF_DAY);

Febi M Felix
  • 2,799
  • 1
  • 10
  • 13
0

The selectedHour will always be 24-hour format. So you can convert it to 12 Hour AM-PM with below way.

public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
        String AM_PM = " AM";
        String mm_precede = "";
        if (selectedHour >= 12) {
            AM_PM = " PM";
            if (selectedHour >=13 && selectedHour < 24) {
                selectedHour -= 12;
            }
            else {
                selectedHour = 12;
            }
        } else if (selectedHour == 0) {
            selectedHour = 12;
        }
        if (selectedMinute < 10) {
            mm_precede = "0";
        }
        Toast.makeText(mContext, "" + selectedHour + ":" + mm_precede + selectedMinute + AM_PM, Toast.LENGTH_SHORT).show();
    }
Harshad Pansuriya
  • 20,189
  • 8
  • 67
  • 95
0

Thanks to "Ready Android"

As said by "Ready Android" we have to convert the 12 hrs input time to 24 hrs format then we have to pass this value in TimePicker and finally when we are using the selected time, again we have to convert 24 hrs time into 12 hrs as shown in this code

String inputTime = "01:15 PM"

try {

// Converting 12 hrs time to 24 hrs

DateFormat inputFormat = new SimpleDateFormat("hh:mm aa", Locale.US);
DateFormat outputFormat = new SimpleDateFormat("HH:mm", Locale.US);
Log.e("finalDate", outputFormat.format(inputFormat.parse(inputTime)));

inputTime = outputFormat.format(inputFormat.parse(inputTime));

//Getting hours and minutes separately
inputHours = inputTime.substring(0, 2);
inputMinutes = inputTime.substring(3, 5);

Log.e("inputHours", inputHours);
Log.e("inputMinutes", inputMinutes);

} catch (ParseException e) {
  e.printStackTrace();
}




TimePickerDialog mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {

    // Converting selected 24 hrs time to 12 hrs
    String timeFormat;

    if (selectedHour == 0) {
        selectedHour += 12;
        timeFormat = "AM";
    } else if (selectedHour == 12) {
        timeFormat = "PM";
    } else if (selectedHour > 12) {
        selectedHour -= 12;
        timeFormat = "PM";
    } else {
        timeFormat = "AM";
    }



    // Placing the 0 in front of single digit hours and minutes

    String finalSelectedHour, finalSelectedMinute;

    if(selectedHour < 10)
        finalSelectedHour = "0" + selectedHour;
    else
        finalSelectedHour = String.valueOf(selectedHour);


    if (selectedMinute < 10)
        finalSelectedMinute = "0" + selectedMinute;
    else
        finalSelectedMinute = String.valueOf(selectedMinute);


    String selectedTime = finalSelectedHour + ":" + finalSelectedMinute + " " + timeFormat;


    tvTime.setText(selectedTime);

}
}, Integer.parseInt(inputHours), Integer.parseInt(inputMinutes), false);//mention true for 24 hour's time format
mTimePicker.setTitle("Select Time");
mTimePicker.show();
Bahu
  • 1,516
  • 2
  • 28
  • 49
0
    scheduleTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);
            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(activity, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {

                    String choosedHour = "";
                    String choosedMinute = "";
                    String choosedTimeZone = "";
                    if(selectedHour > 12){
                        choosedTimeZone = "PM";
                       selectedHour = selectedHour - 12;
                        if(selectedHour < 10){
                            choosedHour = "0"+selectedHour;
                        }else{
                            choosedHour = ""+selectedHour;
                        }
                    }else{
                        choosedTimeZone = "AM";
                        if(selectedHour < 10){
                            choosedHour = "0"+selectedHour;
                        }else{
                            choosedHour = ""+selectedHour;
                        }
                    }

                    if(selectedMinute < 10){
                        choosedMinute = "0"+selectedMinute;
                    }else{
                        choosedMinute= ""+selectedMinute;
                    }

                    scheduleTime.setText(choosedHour + ":" + choosedMinute +" "+choosedTimeZone);
                    //scheduleTime.setText(selectedHour + ":" + selectedMinute);
                    //scheduleTime.setText( strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm );
                }
            }, hour, minute+30, false);//Yes 24 hour time
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();
        }
    });

I used this logic to solve this issue.

Jayakumar
  • 303
  • 4
  • 5