Android Selector de Fecha y Hora

En ocasiones se vuelve necesario el seleccionar una fecha u hora en el celular para realizar una actividad. Ej. Programra una alarma en el celular que se activará en cierta fecha y hora especificadas.

En este tutorial aprenderemos a crear un selector de Hora y Fecha en Android Kotlin. Para ello, primero hay que crear dos botones en una actividad que abrirán los selectores de hora y fecha. Para esta aplicación los botones se llaman prjStrtDateCtrl para la fecha y prjStrtTimeCtrl para el tiempo.

Figura 1. Creación de botones para seleccionar fecha y hora.

Hecho esto, es necesario crear la lógica de la aplicación que desplegará el DatePicker y TimePicker. Para esto, se abre la Actividad con extensión .kt sobre la que se crearon los controles.

//Date picker for StrtProject.
        val prjStrtDateCtrl = root.findViewById<Button>(R.id.prjStrtDateCtrl)
        prjStrtDateCtrl.setOnClickListener {
            val now = Calendar.getInstance()
            val datePicker = DatePickerDialog(context, DatePickerDialog.OnDateSetListener
            {
                view, year, month, dayOfMonth ->
                run {
                    val selectedStrtDate = Calendar.getInstance()
                    selectedStrtDate.set(Calendar.YEAR, year)
                    selectedStrtDate.set(Calendar.MONTH, month)
                    selectedStrtDate.set(Calendar.DAY_OF_MONTH, dayOfMonth)
                    //Format the selected date.
                    val strtDate = simpleDateFormat.format(selectedStrtDate.time)

                    Toast.makeText(root.context, "Date: " + strtDate, Toast.LENGTH_SHORT).show()
                }
            }, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH))
            datePicker.show()
        }
        //Time picker for StrtProject.
        val prjStrtTimeCtrl = root.findViewById<Button>(R.id.prjStrtTimeCtrl)
        prjStrtTimeCtrl.setOnClickListener {
            //Get a calendar instance.
            val now = Calendar.getInstance()

            val timePicker = TimePickerDialog(root.context, TimePickerDialog.OnTimeSetListener { view,
                                                                                                 hourOfDay, minute ->
                val selectedTime = Calendar.getInstance()
                selectedTime.set(Calendar.HOUR_OF_DAY, hourOfDay)
                selectedTime.set(Calendar.MINUTE, minute)
                Toast.makeText(root.context, "Time: " + simpleTimeFormat.format(selectedTime.time),
                        Toast.LENGTH_SHORT).show()
            },
                    now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), false)
            timePicker.show()
        }

¡Y listo! Al ejecutarlo podrás observar el selector de fecha y hora sobre los botones.