How to get selected am_pm value from TimePicker in Android

10,409

Solution 1

If we trust this post timepickerdialog-and-am-or-pm 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.

Solution 2

If you are using TimePicker instead of TimePickerDialog then You must access Am and PM using this code. Some post also told me that AM/PM is private and it is also bug in android.

This code found from google solved my all problem.

timePickerFrom = (TimePicker) findViewById(R.id.timePickerFrom);

    View amPmView  = ((ViewGroup) timePickerFrom.getChildAt(0)).getChildAt(2);
    if(amPmView instanceof Button)
    {
        amPmView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("OnClickListener", "OnClickListener called");
                if(v instanceof Button)
                {
                    if(((Button) v).getText().equals("AM"))
                    {
                        ((Button) v).setText("PM");
                         if (timePickerFrom.getCurrentHour() < 12) {
                             timePickerFrom.setCurrentHour(timePickerFrom.getCurrentHour() + 12);
                            }  

                    }
                    else{
                        ((Button) v).setText("AM");
                         if (timePickerFrom.getCurrentHour() >= 12) {
                             timePickerFrom.setCurrentHour(timePickerFrom.getCurrentHour() - 12);
                            }
                    }
                }

            }
        });
    }

Now you can retrieve time using,

timePickerFrom.setOnTimeChangedListener(new OnTimeChangedListener() {
        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub

            int timeFromHour = timePickerFrom.getCurrentHour();
            int timeFromMinute = timePickerFrom.getCurrentMinute();

        }
    });

I had also this problem, but after lots of effort I got success. Hope works well.

Solution 3

This is how I solved this problem in my application:

    public static String convert24To12System (int hour, int minute) {
    String time = "";
    String am_pm = "";
    if (hour < 12 ) {
        if (hour == 0) hour = 12;
        am_pm = "AM";
    }
    else {
        if (hour != 12) 
        hour-=12;
        am_pm = "PM";
    }
    String h = hour+"", m = minute+"";
    if(h.length() == 1) h = "0"+h;
    if(m.length() == 1) m = "0"+m;
    time = h+":"+m+" "+am_pm;
    return time;
}
Share:
10,409

Related videos on Youtube

Mahe
Author by

Mahe

Updated on September 15, 2022

Comments

  • Mahe
    Mahe over 1 year

    I was using a Time picker from which user can set or change time and save to database. I was able to pick Hour(s) and Minutes(s) from Time Picker using,

    TimePicker getTimepickerTime = (TimePicker) findViewById(R.id.timePicker1);
    int Hour= getTimepickerTime.getCurrentHour();
    int Minute=getTimepickerTime.getCurrentMinute();
    

    but how to pick the am_pm value from Time Picker?

    Please suggest me. I was stuck here.

    Any Help will be Appreciated!!