无法在 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();
}
});
我用这个逻辑解决了这个问题。
我在 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();
}
});
我用这个逻辑解决了这个问题。