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

![]()
