2011-09-23 13 views
15

Quiero configurar una alarma según la selección de un usuario en TimePicker. TimePicker está configurado en modo AM/PM. Para saber si un usuario desea que su alarma se establezca a las 10 AM o las 10 PM, ¿cómo debería obtener el valor AM/PM?TimePicker: cómo obtener AM o PM?

El oyente TimePickerDialog.OnTimeSetListener pasa solo horas y minutos.

Respuesta

1

Creo que se llamará a la devolución de llamada con hora en formato 24 porque. El cuadro de diálogo usa TimePicker internamente. Y TimePicker tiene getCurrentHour moethod, que devuelve la hora en formato 0-23.

11

Puede obtener AM/PM de Timepicker usando el siguiente método. Timepicker es un grupo de vistas. Es por eso que podemos obtener su índice de vista hijo 2 que demuestra que AM/PM es realmente un botón. Para que podamos obtener su texto.

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

     } 
    }; 
+4

No de una manera apropiada. Funciona en 2.2 pero no funciona en 4.1 –

+0

Utilicé otro enfoque. He publicado mi solución como una respuesta. –

2

lo hice utilizando el Calendario, y que deben trabajar en todas las versiones:

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

Aviso el uso de Calendar.HOUR_OF_DAY y Calendar.HOUR si vas a la documentación de ambos sabría el truco.

12

En devolución de llamada desde

public void onTimeSet(TimePicker view, int hourOfDay, int minute) 

llamada más adelante la función

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

Las funciones devuelven algo como esto 13:12

17

encima respuestas son correctas he encontrado forma más sencilla de encontrar AM PM .

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); 
    } 
}; 
+2

Si el formato de tiempo es en 24 horas, ¿por qué necesitamos AM_PM? ¿Hay alguna otra forma de obtener AM_PM en formato de 12 horas? – Simon

7

Hubiera preferido dejar esto como un comentario, pero no tengo suficiente reputación. Con mucho, la forma más concisa para obtener AM o PM está utilizando el operador ternario:

String am_pm = (hourOfDay < 12) ? "AM" : "PM"; 
+0

, pero ¿qué debe hacer si está en el modo am-pm? Is24HourView() devuelve falso. http://developer.android.com/reference/android/widget/TimePicker.html#is24HourView() – likejiujitsu

+0

[Lo mismo] (http://stackoverflow.com/questions/2659954/timepickerdialog-and-am-or-pm/2660148 # 2660148) – Mack

0

por ejemplo: TimePicker sellerTime = (TimePicker) findViewById (R.id.sellerTime); .?.

Integer.toString (((sellerTime.getCurrentHour() intValue())> 12) ((sellerTime.getCurrentHour() intValue()) - 12): (sellerTime.getCurrentHour().intValue())

0

Aquí estoy tomando la fecha y hora actuales del sistema y su actualización con fecha de diálogo y el selector de tiempo

privada int mMonth, mYear, mday, mHour, Mmín;

public static final int DTPKR = 1;

public static final int TMPKR = 2;

// Obtener la fecha y hora actuales en DatePicker de diálogo

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

     } 

Ahora crear los cuadros de diálogo y actualizar los valores // Creación de diálogos

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