2012-07-08 11 views
17

Utilizzo un TimePicker nella mia app. Ogni volta che l'utente apre la schermata con TimePicker, lo inizializzo con l'ora corrente. Quando eseguo questa operazione, TimePicker mostra AM anziché PM. Perché succede? C'è qualcosa che devo aggiungere nel mio codice?Come si imposta AM/PM in 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

Ho avuto lo stesso problema e ho capito. Se usi Calendar.HOUR, significa che stai ignorando il valore di AM/PM. Invece, durante l'impostazione dell'ora corrente, utilizza Calendar.HOUR_OF_DAY per prendere in considerazione AM/PM. –

risposta

38

Dovrete usare Calendar.HOUR_OF_DAY invece di Calendar.HOUR.

, ovvero timePicker.setCurrentHour() si aspetta sempre l'argomento nel formato 24 ore. Sfortunatamente, questo fatto non è documentato correttamente nella documentazione dell'API.

+0

Ha risolto il mio problema. –

+0

Ho impostato l'ora in 'textView' e uso lo stesso textView per selezionare il tempo. Quando imposto l'ora con 'timePicker', diventa visibile a textView ma quando seleziono textView ** di nuovo ** per selezionare l'ora,' timePicker' imposta 'AM/PM' su ** AM **. Per favore, dai una soluzione. – Apurva

1

Penso che sia necessario sovrascrivere il metodo onTimeSet() di Timepicker. Controllare questo link

TimePickerDialog and AM or PM

maggio aiuta te ..

+0

Non sto utilizzando un TimePickerDialog, utilizzo semplicemente il widget TimePicker nel mio layout xml. – AndroidDev

+0

Ma nelle impostazioni, è nel formato 24 ore ?? Basta controllare e provare a utilizzare il formato 12 ore. –

+0

Non è nel formato 12 ore .. in realtà nel timepicker voglio mostrare am o pm a seconda dell'ora corrente – AndroidDev

0

Prova questo:

  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

In primo luogo, ottenere un'istanza della classe Calendar, quindi utilizzare HOUR_OF_DAY per ottenere l'ora. HOUR_OF_DAY sarà nel formato 24 ore, quindi è sufficiente assegnarlo a una variabile e verificare se tale int è maggiore di 0 e inferiore a 12. Se questa condizione è vera, aggiungere AM oppure PM. Poiché HOUR_OF_DAY è il formato di 24 ore, le ore PM verranno visualizzate come 13,14 in modo che per gestire questo, è sufficiente sottrarre il HOUR_OF_DAY per 12. Ecco il codice:

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

Questo è molto utile per timePicker in Android Provalo –