2012-07-08 11 views
17

Estoy usando un TimePicker en mi aplicación. Cada vez que el usuario abre la pantalla con el TimePicker, lo inicializo con la hora actual. Cuando hago esto, TimePicker muestra AM en lugar de PM. ¿Por qué pasó esto? ¿Hay algo que tenga que agregar en mi código?¿Cómo configuro AM/PM en un TimePicker?

Date initDate = m_NoteManageObject.getDateTimeArray(position); 
Calendar myCal = Calendar.getInstance(); 

myCal.setTime(initDate); 
TimePicker timePicker = (TimePicker)layout.findViewById(R.id.time_picker); 

// Initialise Time Picker 

timePicker.setCurrentHour(myCal.get(Calendar.HOUR)); 
timePicker.setCurrentMinute(myCal.get(Calendar.MINUTE)); 
+0

que tenían el mismo problema y me he dado cuenta. Si usa Calendar.HOUR, significa que está ignorando el valor de AM/PM. En cambio, al establecer la hora actual, use Calendar.HOUR_OF_DAY para tener en cuenta AM/PM. –

Respuesta

38

Vas a tener que utilizar Calendar.HOUR_OF_DAY en lugar de Calendar.HOUR.

es decir, timePicker.setCurrentHour() siempre espera el argumento en formato de 24 horas. Desafortunadamente, este hecho no está documentado adecuadamente en la documentación de la API.

+0

Resolvió mi problema. –

+0

Configuré la hora en 'textView' y uso el mismo textView para seleccionar la hora. Cuando establezco el tiempo con 'timePicker', se vuelve visible para textView pero cuando selecciono textView ** nuevamente ** para elegir la hora,' timePicker' establece 'AM/PM' en ** AM **. Por favor, da una solución. – Apurva

1

Creo que debe anular el método onTimeSet() del Timepicker. Compruebe este enlace

TimePickerDialog and AM or PM

Puede que le ayuda ..

+0

No estoy usando un TimePickerDialog, simplemente uso el widget TimePicker en mi diseño xml. – AndroidDev

+0

Pero en la configuración, ¿está en formato de 24 horas? Simplemente verifíquelo e intente usar el formato de 12 horas. –

+0

No está en formato de 12 horas ... en realidad en el timepicker quiero mostrar am o pm dependiendo de la hora actual – AndroidDev

0

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

En primer lugar, obtener una instancia de la clase Calendar, a continuación, utilizar HOUR_OF_DAY para obtener la hora. HOUR_OF_DAY estará en formato de 24 horas, así que simplemente asigne eso a una variable y luego verifique si ese int es mayor que 0 y menos que 12. Si esta condición es verdadera, añada AM o bien PM. Como HOUR_OF_DAY es un formato de 24 horas, las horas de PM se mostrarán como 13,14, por lo tanto, para resolver esto, restar el HOUR_OF_DAY por 12. Aquí está el código:

Calendar calendar = Calendar.getInstance(); 
int hour = calendar.get(Calendar.HOUR_OF_DAY); 
if (hour < 12 && hour >= 0) { 
    tv.setText(hour + " AM"); 
} else { 
    hour -= 12; 
    if(hour == 0) { 
     hour = 12; 
    } 
    tv.setText(hour + " PM"); 
} 
0
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute) { 
    if(hourOfDay>=0 && hourOfDay<12){ 
     time = hourOfDay + " : " + minute + " AM"; 
    } else { 
     if(hourOfDay == 12){ 
      time = hourOfDay + " : " + minute + "PM"; 
     } else{ 
      hourOfDay = hourOfDay -12; 
      time = hourOfDay + " : " + minute + "PM"; 
     } 
    } 

    deliveryTime.setText(time); 
} 
+0

Esto es muy útil para timePicker en Android Pruébalo –

Cuestiones relacionadas