02/10/2019
Insertar y mostrar fechas en una interfaz gráfica de usuario (GUI) en Java es una tarea común en el desarrollo de aplicaciones. Afortunadamente, Java ofrece diversas herramientas para gestionar fechas y mostrarlas de manera efectiva en diferentes formatos. Este artículo profundiza en las diferentes opciones, desde las clases obsoletas hasta las más modernas y recomendadas del paquete java.time
, y cómo integrarlas en una GUI utilizando las librerías Swing o JavaFX.

Utilizando la clase `java.util.Date` (Obsoleta)
Aunque la clase java.util.Date
es obsoleta y se desaconseja su uso en proyectos nuevos, entenderla puede ayudar a comprender la evolución de la gestión de fechas en Java. Para crear un objeto Date
representando una fecha específica, se puede usar un constructor con una cadena de texto en formato 'yyyy-MM-dd':
Date nacimiento = new Date("2000-12-31");
Para otros formatos, como 'dd/MM/yyyy', es necesario emplear SimpleDateFormat
:
String pattern = "dd/MM/yyyy";SimpleDateFormat formatter = new SimpleDateFormat(pattern);Date dia = formatter.parse("31/12/1999");String diaString = formatter.format(dia);
Nota: La clase Date
tiene limitaciones y problemas de sincronización, lo que la hace inadecuada para la mayoría de las aplicaciones modernas.
El paquete java.time : La solución moderna
El paquete java.time
, introducido en Java 8, proporciona clases más robustas y fáciles de usar para manejar fechas y horas. Estas clases son inmutables, lo que simplifica el código y reduce la posibilidad de errores.
Clases principales del paquete java.time
- LocalDate: Representa una fecha (año, mes, día) sin hora ni zona horaria.
- LocalTime: Representa una hora (hora, minuto, segundo, nanosegundo) sin fecha ni zona horaria.
- LocalDateTime: Combina
LocalDate
yLocalTime
. - ZonedDateTime: Incluye zona horaria.
- Instant: Representa un punto en la línea de tiempo en UTC.
Mostrar la fecha en la GUI
Para mostrar una fecha en una interfaz gráfica, usualmente se utiliza un componente de texto como un JLabel
o un JTextField
. El valor se obtiene de las clases de java.time
y se formatea con DateTimeFormatter
:
import java.time.LocalDate;import java.time.format.DateTimeFormatter;LocalDate fechaActual = LocalDate.now();DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");String fechaFormateada = fechaActual.format(formato);JLabel etiquetaFecha = new JLabel("Fecha actual: " + fechaFormateada);// ... Agregar etiquetaFecha a su panel ...
En este ejemplo, se obtiene la fecha actual, se formatea como 'dd/MM/yyyy' y se muestra en un JLabel
. Se puede adaptar el formato y el componente según las necesidades de la aplicación.
Seleccionar una fecha con un JDatePicker
Para permitir al usuario seleccionar una fecha, se puede usar un componente de selección de fecha, como el JDatePicker
de las librerías de terceros (como JCalendar). Se deben incluir las librerías apropiadas y luego se puede usar:
// ... Código para inicializar JDatePicker ...JDatePicker datePicker = new JDatePicker();// ... Agregar datePicker a su panel ...// Obtener la fecha seleccionadaLocalDate fechaSeleccionada = (LocalDate) datePicker.getModel().getValue();
El código anterior mostraría cómo obtener una fecha usando JDatePicker, pero su implementación requiere añadir la librería JCalendar y su integración con Swing.
Tabla comparativa de opciones para manejar fechas
Clase | Descripción | Recomendado |
---|---|---|
java.util.Date | Clase obsoleta | No |
java.util.Calendar | Clase obsoleta | No |
java.time.LocalDate | Fecha sin hora ni zona horaria | Sí |
java.time.LocalTime | Hora sin fecha ni zona horaria | Sí |
java.time.LocalDateTime | Fecha y hora sin zona horaria | Sí |
java.time.ZonedDateTime | Fecha y hora con zona horaria | Sí (para aplicaciones internacionales) |
Ejemplos en JavaFX
Para las interfaces gráficas construidas con JavaFX, la integración es similar, empleando componentes como Label
, TextField
y posiblemente un DatePicker
integrado en JavaFX.
import javafx.scene.control.Label;import javafx.scene.control.DatePicker;import java.time.LocalDate;import java.time.format.DateTimeFormatter;DatePicker datePicker = new DatePicker();// ... Agregar datePicker a la escena ...datePicker.setOnAction(e->{ LocalDate fechaSeleccionada = datePicker.getValue(); DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd-MM-yyyy"); String fechaFormateada = fechaSeleccionada.format(formato); Label lblFecha = new Label("Fecha seleccionada: " + fechaFormateada); // ... Agregar lblFecha a la escena ...});
Este ejemplo, muestra como obtener la fecha seleccionada por el usuario en un DatePicker de JavaFX y presentarlo en un Label.
Consultas habituales
- ¿Cómo formatear una fecha en Java? Usar
DateTimeFormatter
con el patrón deseado. - ¿Cómo obtener la fecha actual en Java? Usar
LocalDate.now()
oLocalDateTime.now()
. - ¿Cómo calcular la diferencia entre dos fechas? Usar
Period.between(fecha1, fecha2)
. - ¿Qué librería usar para un DatePicker en Swing? Se recomienda buscar librerías de terceros como JCalendar.
- ¿Cómo manejar zonas horarias en Java? Usar
ZonedDateTime
.
La gestión de fechas en las interfaces gráficas de Java se ha simplificado considerablemente con el paquete java.time
. Utilizar estas clases modernas mejora la legibilidad, mantenibilidad y robustez del código, a diferencia de las clases obsoletas.