TimePickerDialog y AM o PM

Tengo un TimePickerDialog con is24Hour puesto a falso puesto que quiero presentar al usuario final con el formato más familiar de 12 horas. Cuando se ajustan el indicador de hora, minuto y AM PM y se devuelve el tiempo, ¿cómo puedo identificar si el usuario final ha seleccionado AM o PM?

Esto es lo que tengo para el oyente:

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; // mIsAM = WHERE CAN I GET THIS VALUE } }; 

El hourOfDay siempre será de 24 horas. Si abrió el cuadro de diálogo con is24HourView configurado como false , el usuario no tendrá que ocuparse de las horas formateadas las 24 horas, pero Android lo convertirá en un tiempo de 24 horas cuando llame a onTimeSet() .

Esto funcionó para mí:

 public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String am_pm = ""; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); datetime.set(Calendar.MINUTE, minute); if (datetime.get(Calendar.AM_PM) == Calendar.AM) am_pm = "AM"; else if (datetime.get(Calendar.AM_PM) == Calendar.PM) am_pm = "PM"; String strHrsToShow = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+""; ((Button)getActivity().findViewById(R.id.btnEventStartTime)).setText( strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm ); } 

Hola usted podría utilizar su propio formato como esto:

  String myFormat = "hh:mm a"; // your own format SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); String formated_time = sdf.format(calendar_time.getTime()); //format your time 

He encontrado que "a" es el código en el tiempo de formateo que representa AM-PM: http://www.tutorialspoint.com/java/java_date_time.htm

Yo estaba corriendo en el mismo problema. Tengo un TimePicker en mi aplicación, donde después de elegir una hora y pulsar un botón que se llevará a una pantalla que muestra qué hora fue elegido. El "tiempo" elegido era correcto, pero a veces el valor AM / PM sería opuesto a lo que se había elegido. Finalmente lo arreglé cambiando lo que estaba almacenando para el argumento "hrs" del TimePicker.

 private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hrs, int mins) { hour = hrs; minute = mins; c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, hour); //instead of c.set(Calendar.HOUR, hour); c.set(Calendar.MINUTE, minute); 

Ahora, cuando pulsé el botón para ir a la siguiente pantalla, mostró correctamente el valor correcto de AM / PM elegido.

Un mensaje de brindis limpio con lo que el usuario seleccionado mostrando el formato HH: MM apropiado

  public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String AM_PM = " AM"; String mm_precede = ""; if (hourOfDay >= 12) { AM_PM = " PM"; if (hourOfDay >=13 && hourOfDay < 24) { hourOfDay -= 12; } else { hourOfDay = 12; } } else if (hourOfDay == 0) { hourOfDay = 12; } if (minute < 10) { mm_precede = "0"; } Toast.makeText(mContext, "" + hourOfDay + ":" + mm_precede + minute + AM_PM, Toast.LENGTH_SHORT).show(); } 

Pruebe este método sencillo:

  void openTimeFragment() { TimePickerDialog mTimePicker; final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); mTimePicker = new TimePickerDialog(YourActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { String time = selectedHour + ":" + selectedMinute; SimpleDateFormat fmt = new SimpleDateFormat("HH:mm"); Date date = null; try { date = fmt.parse(time ); } catch (ParseException e) { e.printStackTrace(); } SimpleDateFormat fmtOut = new SimpleDateFormat("hh:mm aa"); String formattedTime=fmtOut.format(date); edtTextTime.setText(formattedTime); } }, hour, minute, false);//No 24 hour time mTimePicker.setTitle("Select Time"); mTimePicker.show(); } 
  private String getTime(int hr,int min) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY,hr); cal.set(Calendar.MINUTE,min); Format formatter; formatter = new SimpleDateFormat("h:mm a"); return formatter.format(cal.getTime()); } 

Prueba esto :

  Calendar calendar = Calendar.getInstance(); calendar.set(0, 0, 0, hourOfDay, minute, 0); long timeInMillis = calendar.getTimeInMillis(); java.text.DateFormat dateFormatter = new SimpleDateFormat("hh:mm a"); Date date = new Date(); date.setTime(timeInMillis); time.setText(dateFormatter.format(date)); 

Si su expectativa era establecer directamente AM / PM en el cuadro de diálogo Selector de tiempo, hay un trabajo alrededor. Esto funciona si rellena previamente el EditText con el tiempo actual / predeterminado. – Antes de instanciar el diálogo, aumente el componente de hora en 12 si EditText tiene valor de tiempo PM.

Sref_Time3 es valor ampm; Sref_Time1 es el componente hora.

  if (sref_Time3.equals("PM")) { hour = hour + 12; } else if (sref_Time1.equals("12")) { hour = 0; } // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); 

Gracias y Saludos.

Pantalla Cuadro de diálogo Selector de tiempo

Esto funciona para mí:

 TimePickerDialog timePickerDialog = new TimePickerDialog(AddFocusActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.HOUR,hourOfDay); time = calendar.get(Calendar.HOUR) + ((calendar.get(Calendar.AM_PM) == Calendar.AM) ? "am" : "pm"); Log.e("time",time); } },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), false); 
 public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calendar = Calendar.getInstance(); calendar.set(0, 0, 0, hourOfDay, minute); textView.setText((String) DateFormat.format("hh:mm aaa", calendar)); } } //For showing the dialog put below two lines where you want to call TimePickerFragment timePickerFragment = new TimePickerFragment(); timePickerFragment.show(getSupportFragmentManager(), "TimePicker"); 

Usted puede intentar mi solución, utilicé el formato de "hh: milímetro un" para fijar tiempo de AM / PM :

 SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH); String formattedTime = formatter.format(myCalendar.getTime()); EditText.setText(formattedTime); 
 private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { boolean isPM = (hourOfDay >= 12); tvTime.setText(String.format("%02d:%02d %s", (hourOfDay == 12 || hourOfDay == 0) ? 12 : hourOfDay % 12, minute, isPM ? "PM" : "AM")); } }; 
  • Timepicker de los desarrolladores de Android no se permite estática
  • Android: enfoque en elementos TimePicker
  • Cómo establecer un intervalo de minutos personalizado en TimePickerDialog en Android
  • ¿Es posible quitar el botón AM / PM de TimePicker?
  • Android: timepicker y datepicker en el mismo cuadro de diálogo
  • Cómo mostrar dos números en minuto en android
  • ¿Cómo se utilizan los skins personalizados de Datepicker y Timepicker?
  • Android: Establecer el tiempo en el selector de tiempo con el tiempo mostrado en la vista de texto
  • Cómo inhabilitar "autoscroll" hora en valor de ajuste minuto en el selector de tiempo android
  • Android TimePicker Botón AM / PM que no invoca onTimeChanged
  • TimePicker hora no se actualiza después de cambiar a 24h
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.