1. Información general
En este breve tutorial, veremos cómo extraer el día de la semana como un número y como texto de una fecha de Java.
2. Problema
La lógica empresarial a menudo necesita el día de la semana. ¿Por qué? Por un lado, las horas de trabajo y los niveles de servicio difieren entre los días laborables y los fines de semana. Por lo tanto, obtener el día como un número es necesario para muchos sistemas. Pero también es posible que necesitemos el día como texto para mostrar.
Entonces, ¿cómo extraemos el día de la semana de las fechas en Java?
3. Solución con java.util.Date
java.util.Date ha sido la clase de fecha de Java desde Java 1.0. El código que comenzó con la versión 7 de Java o una versión anterior probablemente use esta clase.
3.1. Día de la semana como número
Primero, extraemos el día como un número usando java.util.Calendar :
public static int getDayNumberOld(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.DAY_OF_WEEK); }
El número resultante varía de 1 (domingo) a 7 (sábado) . Calendar define las constantes para esto: Calendar.SUNDAY - Calendar.SATURDAY .
3.2. Día de la semana como texto
Ahora extraemos el día como texto . Pasamos un Locale para determinar el idioma:
public static String getDayStringOld(Date date, Locale locale) { DateFormat formatter = new SimpleDateFormat("EEEE", locale); return formatter.format(date); }
Esto devuelve el día completo en su idioma , como "Lunes" en inglés o "Montag" en alemán.
4. Solución con java.time.LocalDate
Java 8 revisó el manejo de fecha y hora e introdujo java.time.LocalDate para las fechas. Por lo tanto, los proyectos Java que solo se ejecutan en la versión 8 de Java o superior deben usar esta clase.
4.1. Día de la semana como número
Extraer el día como un número es trivial ahora:
public static int getDayNumberNew(LocalDate date) { DayOfWeek day = date.getDayOfWeek(); return day.getValue(); }
El número resultante todavía va de 1 a 7. ¡Pero esta vez, el lunes es 1 y el domingo es 7 ! El día de la semana tiene su propia enumeración : DayOfWeek . Como se esperaba, los valores de enumeración son LUNES - DOMINGO .
4.2. Día de la semana como texto
Ahora extraemos el día como texto nuevamente. También pasamos en un Locale :
public static String getDayStringNew(LocalDate date, Locale locale) { DayOfWeek day = date.getDayOfWeek(); return day.getDisplayName(TextStyle.FULL, locale); }
Al igual que con java.util.Date , devuelve el día completo en el idioma elegido.
5. Conclusión
En este artículo, extrajimos el día de la semana de las fechas de Java. Vimos cómo devolver tanto un número como un texto usando java.util.Date y java.time.LocalDate .
Como siempre, el código está disponible en GitHub.