Android

Mostrar DatePicker en Android – Ejemplo para obtener fecha

Una interfaz intuitiva y bonita a la hora de programar en Android es el DatePicker, el cual es un elemento que permite que el usuario seleccione una fecha en un calendario.

En este tutorial vas a aprender a mostrar un DatePicker en Android (funciona desde Android 4) y a leer la fecha que el usuario seleccione; todo eso en pocas líneas de código usando DatePickerDialog.

Al final tendremos una aplicación de Android que permite al usuario seleccionar una fecha con un DatePicker como se ve en la imagen:

DatePicker activo en Android – Seleccionar fecha

Código fuente y descarga de app

Puedes explorar el código fuente en GitHub, lo más importante es el MainActivity. Para descargar la app y probarla por ti mismo, visita la página de releases.

Escuchar cambio de fecha de DatePicker

Veamos la explicación. Para mostrar un DatePicker primero hay que declarar un listener para escuchar cuando el usuario selecciona la fecha.

El listener debe ser de tipo DatePickerDialog.OnDateSetListener; hay que sobrescribir al método onDateSet para escuchar cuando el usuario selecciona la fecha.

// Crear un listener del datepicker;
private DatePickerDialog.OnDateSetListener listenerDeDatePicker = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int anio, int mes, int diaDelMes) {
        // Esto se llama cuando seleccionan una fecha. Nos pasa la vista, pero más importante, nos pasa:
        // El año, el mes y el día del mes. Es lo que necesitamos para saber la fecha completa
    }
};

Cuando se llama al listener dentro de la interfaz, nos pasa la vista pero también el año, mes y día del mes que fueron seleccionados. Con eso ya podemos saber la fecha completa.

Nota: el mes es dado comenzando en 0, por lo tanto enero es 0 y diciembre es 11.

Mostrar DatePicker en Android

Cuando ya hemos declarado el listener, podemos mostrar el DatePicker. Para ello tenemos que pasarle los siguientes argumentos en el orden que sigue:

  1. El contexto
  2. El listener que declaramos antes
  3. Año
  4. Mes
  5. Día del mes

Los tres últimos argumentos son la fecha que se va a mostrar por defecto. Si quieres mostrar la fecha actual pudes obtenerla así:

// Recuerda importar al inicio
import java.util.Calendar;

// Y luego ya podrás obtener la fecha
final Calendar calendario = Calendar.getInstance();
int anio = calendario.get(Calendar.YEAR);
int mes = calendario.get(Calendar.MONTH);
int diaDelMes = calendario.get(Calendar.DAY_OF_MONTH);

Sabiendo eso, ahora sí vamos a mostrar el DatePicker:

// Le pasamos lo que haya en las globales
DatePickerDialog dialogoFecha = new DatePickerDialog(MainActivity.this, listenerDeDatePicker, ultimoAnio, ultimoMes, ultimoDiaDelMes);
//Mostrar
dialogoFecha.show();

En mi caso le mando el contexto de MainActivity.this, dependiendo de tu actividad eso va a cambiar; te invito a leer este post sobre algunos errores al pasar el contexto en Android.

Las 3 últimas variables son unas globales, si analizas el código verás que se obtienen con Calendar.

Poner fecha en EditText

Esto no es estrictamente necesario pero en este caso puse la fecha en el EditText. También escuchamos el click del mismo y justo ahí mostramos el DatePicker.

Ventana principal de DatePicker en Android

Para que el usuario no escriba directamente en el EditText pero sí pueda tocarlo, hay que declarar en el XML la propiedad clickable en true, focusable en false y el inputType hay que ponerlo en none.

Cuando se selecciona la fecha se refresca el valor usando String.format y setText como se ve en el ejemplo:

public void refrescarFechaEnEditText() {
    // Formateamos la fecha pero podríamos hacer cualquier otra cosa ;)
    String fecha = String.format(Locale.getDefault(), "%02d-%02d-%02d", ultimoAnio, ultimoMes+1, ultimoDiaDelMes);

    // La ponemos en el editText
    etFecha.setText(fecha);
}

De esta manera podemos mostrar un DatePicker cuando el usuario toca el EditText, mostrando la fecha en el mismo.

Por cierto, al mostrar la fecha le agrego 1 al mes, esto es porque, como ya lo dije antes, el número de mes se cuenta desde el 0.

Aprende más sobre Java o Android.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.