0

我有一个带有时间选择器的编辑文本。当我单击编辑文本获取时间选择器对话框时。如果我选择 10:00 PM 编辑文本应该显示 10:00 PM,但我得到 22:00 PM。我怎样才能改变这个?我的编码部分在下面给出..

 protected void showTime() 
 {
    TimePickerDialog tpd = new TimePickerDialog(this,
            new TimePickerDialog.OnTimeSetListener() 
    {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay,
                        int minute)
                {
                    hour=hourOfDay;
                    min=minute;

                    if(hourOfDay>12)
                    {
                        hourOfDay -= 12;
                        zone = "PM";
                    }
                    else
                    {
                        zone = "AM";
                    }
                    edtTime.setText(" "+pad(hour) + ":" + min+ " "+zone);
                }
            }, hour, min, true);
    tpd.setTitle("Select Time");
    tpd.show();

}
4

1 回答 1

0

请注意,您只修改hourOfDayhourOfDay -= 12;因此,您还需要在setText()调用中使用相同的变量,因为hour仍然引用原始的 24 小时格式值。

@Override
public void onTimeSet(TimePicker view, int hourOfDay,
        int minute)
{
    hour=hourOfDay;
    min=minute;

    if(hourOfDay>12)
    {
        hourOfDay -= 12;
        zone = "PM";
    }
    else
    {
        zone = "AM";
    }
    edtTime.setText(" "+pad(hourOfDay) + ":" + min+ " "+zone);
}

请使用 Java DateTime API 而不是使用数学将 24 小时格式(onTimeSet()参数输入)转换为 AM/PM 格式。否则,边缘情况(如00:00)更难显示。以下是我建议您这样做的方法。

DateFormat df = new SimpleDateFormat("hh:mm a"); // [1-12]:[0-59] AM|PM

Calendar cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);

edtTime.setText(df.format(cal.getTime()));

查看SimpleDateFormat文档以获取更多信息。

于 2015-02-07T06:20:23.853 回答