如何从Android中的TimePicker中选择am_pm值

时间:2013-03-14 11:08:35

标签: android timepicker

我使用的是时间选择器,用户可以从中设置或更改时间并保存到数据库。我能够使用时间选择器选择小时和分钟,

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

但如何从Time Picker中选择am_pm值?

请建议我。我被困在这里。

任何帮助都会得到赞赏!!

4 个答案:

答案 0 :(得分:4)

如果您使用的是TimePicker而不是TimePickerDialog,则必须使用此代码访问Am和PM。有些帖子还告诉我AM / PM是私有的,它也是android中的bug。

从谷歌找到的代码解决了我的所有问题。

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);
                            }
                    }
                }

            }
        });
    }

现在您可以使用

检索时间
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();

        }
    });

我也有这个问题,但经过多次努力,我获得了成功。 希望运作良好。

答案 1 :(得分:1)

如果我们相信这篇文章timepickerdialog-and-am-or-pm,您不需要获取am / pm值因为小时将始终为24h格式。 Timepicker显示ap / pm但返回24h格式值。

答案 2 :(得分:0)

您始终可以使用Java或Android Framework提供的SimpleDateFormat来执行此操作。

onTimeSet Listener返回的小时数始终为24小时格式, 简单地解析它并将其格式化为您希望它显示的任何方式。

this.appointmentTimeDialog = new TimePickerDialog(getActivity(),new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    SimpleDateFormat format = new SimpleDateFormat("HH:MM");
                    try {
                        Date date = format.parse(""+hourOfDay+":"+minute);
                        timeCallBack.setText(new SimpleDateFormat("h:MM a").format(date.getTime()));
                    }catch(ParseException ex){
                        ex.printStackTrace();
                    }
                }
            }, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE),false);

我希望能解决一个特殊的Android开发者初学者问题:)

答案 3 :(得分:0)

这就是我在我的应用程序中解决这个问题的方法:

    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;
}