3.7 Calendario

El Calendario nos permite elegir tanto la fecha como la hora del dispositivo pero de forma separada, es decir, podemos elegir sólo la fecha o sólo la hora por medio del DatePicker o TimePicker y podemos dejar que se muestren en pantalla o invocarlos desde un botón para ahorrar espacio y lo que podemos hacer es guardar en variables los valores de año, mes, día, hora y minuto para después usarlas como queramos.

En este ejemplo tomaremos la fecha actual al iniciar el Activity y después podremos cambiarla con el DatePicker y TimePicker desde un botón o directamente del que mostramos en pantalla.

<DatePicker
        android:id="@+id/Calendario"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"></DatePicker>

    <TimePicker
        android:id="@+id/Horas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"></TimePicker>

Primero creamos un Calendar para tomar la fecha por separado (año, mes, día, hora, minuto, segundo) actual del dispositivo.

Calendar Calendario = Calendar.getInstance();
        Dia = Calendario.get(Calendar.DAY_OF_MONTH);
        Mes = Calendario.get(Calendar.MONTH);
        Año = Calendario.get(Calendar.YEAR);
        Hora = Calendario.get(Calendar.HOUR);
        Min = Calendario.get(Calendar.MINUTE);
        Seg = Calendario.get(Calendar.SECOND);

Lo siguiente es cargar nuestro DatePicker y TimePicker con los valores obtenidos.

DatePicker = (DatePicker) findViewById(R.id.Calendario);
        DatePicker.init(Año, Mes, Dia, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int year, int month, int day) {
                CambiarFecha(year,month+1,day);
            }
        });

        TimePicker = (TimePicker) findViewById(R.id.Horas);
        TimePicker.setOnTimeChangedListener(new android.widget.TimePicker.OnTimeChangedListener(){
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                if(hourOfDay>12) Horario = " p.m.";
                else Horario = " a.m.";
                CambiarHoras(hourOfDay,minute,Seg,Horario);
            }});

El DatePicker y TimePicker los podemos abrir con una fecha seleccionada, casi siempre es la fecha actual, que es la que tenemos en las variables Año, Mes, Dia, Hora y Min para no perdernos tanto a la hora de seleccionarla y poder navegar fácilmente hasta la fecha que queramos seleccionar.

Nuestra función ObtenerFecha abre el DatePickerDialog con la fecha actual seleccionada

private void ObtenerFecha(){
        DatePickerDialog SeleccionarFecha = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                CambiarFecha(year,month+1,dayOfMonth);
            }
        },Año, Mes, Dia);
        SeleccionarFecha.show();
    }
Curso Android Calendario

La funcion ObtenerHora nos abre el TimerPickerDialog con la hora actual seleccionada

private void ObtenerHora(){
        TimePickerDialog SeleccionarHora = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                if(hourOfDay>12) Horario = " p.m.";
                else Horario = " a.m.";
                CambiarHoras(hourOfDay,minute,Seg, Horario);
            }
        }, Hora, Min, false);
        SeleccionarHora.show();
    }

Ahora la fecha que seleccionemos necesitamos colocarla en alguna parte ya sea una variable o un EditText o un TextView, en este caso lo pondremos en un TextView con la siguiente función y en el formato que queramos, CambiarFecha y CambiarHora

private  void CambiarFecha(int Año, int Mes, int Dia){
        String CeroD = "", CeroM = "";
        if(Dia<10) CeroD = "0";
        if(Mes<10) CeroM = "0";
        TxtFecha.setText(CeroD + Dia + " / " + CeroM + Mes + " / " + Año);
    }

    private void CambiarHoras(int Hora, int Min, int Seg, String Horario){
        String CeroH = "", CeroM = "", CeroS="";
        if(Hora<10) CeroH = "0";
        if(Min<10) CeroM = "0";
        if(Seg<10) CeroS = "0";
        TxtHoras.setText(CeroH + Hora + " : " + CeroM + Min + " : " + CeroS + Seg + Horario);
    }
Curso Android Calendario