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