TimePickerDialog y AM o PM

Tengo un TimePickerDialog con is24Hour establecido en falso porque quiero presentar al usuario final el formato más familiar de 12 horas. Cuando se configuran la hora, los minutos y el indicador AM PM y se devuelve la hora, ¿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 } }; 

La hourOfDay siempre será de 24 horas. Si abrió el cuadro de diálogo con is24HourView establecido en false , el usuario no tendrá que lidiar con las horas formateadas de 24 horas, pero Android lo convertirá a una hora 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, podrías usar tu propio formato como este:

  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 

Encontré que “a” es el código en formato de tiempo que representa AM-PM: http://www.tutorialspoint.com/java/java_date_time.htm

un mensaje de brindis ordenado con lo que el usuario seleccionó mostrando el formato adecuado HH: MM

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

Me estaba encontrando con el mismo problema. Tengo un TimePicker en mi aplicación donde, después de elegir una hora y presionar un botón, accederá a una pantalla que muestra la hora que se eligió. El “tiempo” elegido fue correcto, pero a veces el valor AM / PM sería opuesto al que se eligió. 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 presiono el botón para pasar a la pantalla siguiente, se muestra correctamente el valor AM / PM correcto elegido.

Prueba este simple método:

  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 AM / PM directamente en el cuadro de diálogo del selector de tiempo, hay una solución alternativa. Esto funciona si completa previamente EditText con la hora actual / predeterminada. – Antes de crear una instancia del diálogo, aumente el componente de hora en 12 si EditText tiene un valor de tiempo de PM.

sref_Time3 es un valor de ampm; sref_Time1 es el componente de 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 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"); 

Puedes probar mi solución, utilicé el formato “hh: mm a” para configurar la hora 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")); } }; 

Sé que es demasiado tarde para responder, y la respuesta perfecta ya está seleccionada, pero pensé que no estaba del todo clara para los principiantes, así que publicando mi respuesta

 editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Calendar mcurrentTime = Calendar.getInstance(); int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); int minute = mcurrentTime.get(Calendar.MINUTE); TimePickerDialog mTimePicker; mTimePicker = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { String AM_PM; if (selectedHour >=0 && selectedHour < 12){ AM_PM = "AM"; } else { AM_PM = "PM"; } editText.setText( selectedHour + ":" + selectedMinute+" "+AM_PM); } }, hour, minute, false); mTimePicker.setTitle("Select Time"); mTimePicker.show(); } }); 

Prueba esto, espero que te ayude

  int mHour; int mMin; StringBuilder stringBuilder = new StringBuilder(); TimePickerDialog timePickerDialog = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMin = minute; String am_pm ; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); datetime.set(Calendar.MINUTE, minute); am_pm = getTime(mHour,mMin); stringBuilder.append(" "); stringBuilder.append(am_pm); editTextDate.setText(stringBuilder); } }, mHour, mMin, false); timePickerDialog.show(); public 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()); }