Je souhaite définir une alarme en fonction du choix d'un utilisateur dans TimePicker. TimePicker est réglé sur le mode AM/PM. Pour savoir si un utilisateur souhaite que son alarme soit réglée sur 10 heures ou 22 heures, comment dois-je obtenir la valeur AM/PM?
L'écouteur TimePickerDialog.OnTimeSetListener
ne passe que des heures et des minutes.
Les réponses ci-dessus sont exactes. J'ai trouvé le moyen le plus simple de trouver matin.
TimePickerDialog.OnTimeSetListener onStartTimeListener = new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String AM_PM ;
if(hourOfDay < 12) {
AM_PM = "AM";
} else {
AM_PM = "PM";
}
mStartTime.setText(hourOfDay + " : " + minute + " " + AM_PM );
}
};
Sur rappel de
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
appel ci-dessous fonction
private String getTime(int hr,int min) {
Time tme = new Time(hr,min,0);//seconds by default set to zero
Format formatter;
formatter = new SimpleDateFormat("h:mm a");
return formatter.format(tme);
}
Les fonctions retournent quelque chose comme ceci
Vous pouvez obtenir AM/PM auprès de Timepicker en utilisant la méthode suivante . Timepicker est un groupe de vues. C’est pourquoi nous pouvons obtenir son index de vue enfant 2 qui montre que AM/PM est en fait un bouton. Nous pouvons donc obtenir son texte.
Mycallback=new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
ViewGroup vg=(ViewGroup) view.getChildAt(0);
Toast.makeText(TimePickerDemoActivity.this, hourOfDay+":"+minute+":"+((Button)vg.getChildAt(2)).getText().toString(), 5000).show();
}
};
J'aurais préféré laisser cela comme commentaire, mais je n'ai pas assez de réputation. De loin, le moyen le plus succinct d’obtenir AM ou PM utilise l’opérateur ternaire:
String am_pm = (hourOfDay < 12) ? "AM" : "PM";
Je l'ai fait en utilisant Calendar, et cela devrait fonctionner sur toutes les versions:
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":Integer.toString( datetime.get(Calendar.HOUR) );
((Button)getActivity().findViewById(R.id.btnEventStartTime)).setText( strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm );
}
Notez l'utilisation de Calendar.HOUR_OF_DAY
et Calendar.HOUR
si vous consultez la documentation des deux, vous connaissez le truc.
Je ne sais pas si ça va aider, mais je travaille un peu sur la même chose. Voir ma réponse ici TimePickerDialog et AM ou PM
Je pense que callback sera appelé avec hour au format 24 parce que. La boîte de dialogue utilise TimePicker
en interne. Et TimePicker
a getCurrentHour moethod, qui renvoie heure au format 0-23.
Ici, je prends la date et l'heure actuelles du système et les met à jour avec le dialogue du sélecteur de date et d'heure
private int mMonth,mYear,mDay,mHour,mMin;
public static final int DTPKR = 1;
public static final int TMPKR = 2;
// Getting the current date and time into DatePicker dialog
public void getCurrentDate(){
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
}
public void getCurrentTime(){
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMin = c.get(Calendar.MINUTE);
}
Créez maintenant les boîtes de dialogue et mettez à jour les valeurs // Création de boîtes de dialogue
protected Dialog onCreateDialog(int id) {
switch (id) {
case DTPKR:
return new DatePickerDialog(this,lisDate, mYear, mMonth, mDay);
case TMPKR:
return new TimePickerDialog(this,lisTime,mHour, mMin, false);
}
return null;
}
//setting date and updating editText
DatePickerDialog.OnDateSetListener lisDate = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
etDate.setText(new StringBuilder() .append(mDay).append("/").append(mMonth+1).append("/").append(mYear));
getCurrentDate();
}
};
//setting time and updating editText
TimePickerDialog.OnTimeSetListener lisTime=new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour=hourOfDay;
mMin=minute;
String AM_PM ;
if(hourOfDay < 12) {
AM_PM = "AM";
} else {
AM_PM = "PM";
mHour=mHour-12;
}
etTime.setText(mHour+":"+mMin+" "+AM_PM);
getCurrentDate();
}
};
par exemple :
TimePicker sellerTime = (TimePicker) findViewById(R.id.sellerTime);
Integer.toString(((sellerTime.getCurrentHour().intValue()) > 12) ? ((sellerTime.getCurrentHour().intValue()) - 12) :
(sellerTime.getCurrentHour().intValue())