无法在 TimePickerDialog 中动态 select AM/PM

Not able to select AM/PM dynamically in TimePickerDialog

我在 TextView 中玩得像 10:53 PM。单击该 TextView 时,我在 TimePickerDialog 上显示 TextView 时间,但我无法根据 TextView 显示 AM/PM。对于这个要求,我看到了 link1, link2, link3 等等,但对我来说没有任何效果。有人知道吗

我的代码

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

    }
});

编辑 它总是选择 AM 而不是 PM,如图所示

尝试通过timepicker.setCurrentHour(Calendar.HOUR_OF_DAY);

设置您的当前时间

selectedHour 将始终为 24 小时格式。所以你可以用下面的方法把它转换成12 Hour AM-PM

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

您不需要获取 am/pm 值,因为小时将始终采用 24 小时格式。时间选择器显示 ap/pm 但 return 24 小时格式值。

这里 hourOfDay 总是 24 小时制。如果您打开对话框时将 is24HourView 设置为 false,用户将不必处理 24 小时格式的时间,但 Android 会在调用 onTimeSet() 时将其转换为 24 小时时间。

    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"

正如 "Ready Android" 所说,我们必须将 12 小时输入时间转换为 24 小时格式,然后我们必须在 TimePicker 中传递该值,最后当我们使用所选时间时,我们必须再次转换24小时时间变成12小时如代码所示

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

我用这个逻辑解决了这个问题。