LocalDate
LocalDate es un objeto de tiempo, inmutable, que guarda la fecha como una etapa de Año-mes-día. Es uno de los objetos que podemos proponer para cambiar por Date o Calendar, debido a los métodos que posee.
Se ha de remarcar que no se puede considerar que pueda representar tiempo, porque no contiene ni el desplazamiento, ni la zona a que pertenece la fecha, sin embargo ya es útil para establecer la fecha actual, o trabajar con cumpleaños.
Alguna de las posibilidades, son:
Crea un objeto LocalDate desde diversos orígenes con now(), of(), ofEpochDay(), ofYearDay(), parse(), from()
Crea un objeto LocalDate en base a otro LocalDate, modificando algun dato con with(), withDayOfMonth(), withDayOfYear(), withMonth(), withYear()
Obtiene un objeto LocalDate añadiendo algun valor a otro LocalDate con plus(), plusDays(), plusMonths(), plusWeeks(), plusYears()
Obtiene un objeto LocalDate restándole algun valor a otro LocalDate con minus(), minusDays(), minusMonths(), minusWeeks(), minusYears() (a partir del 10/10/24)
Podemos comparar fechas, ver si una fecha está dentro de un bisiesto o una unidad esta soportada con: isAfter(), isBefore(), isEqual(), isLeapYear(), isSupported(), equals(), compareTo() (a partir del 10/10/24)
Extracción de datos de un LocalDate con: get(), getChronology(), getDayOfMonth(), getDayOfWeek(), getDayOfYear(), getEra(), getLong(), getMonth(), getMonthValue(), getYear() (a partir del 11/10/24)
lengthOfMonth(), lengthOfYear()
int lengthOfMonth()
int lengthOfYear()
Nos facilita el numero de días que tiene el mes o el año de la fecha
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
System.out.println("Fecha :" +
hoy.toString());
System.out.println("Longitud mes :" +
hoy.lengthOfMonth());
System.out.println("Longitud año :" +
hoy.lengthOfYear());
}
Las instrucción nos facilitaran los días de duración del mes que se encuentre en el LocalDate, y de dicho año. en nuestro caso:
range()
ValueRange range(TemporalField field)
Facilita el rango con que podemos filtrar cualquiera de los valores soportados
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
System.out.println("Fecha :" +
hoy.toString());
System.out.println("Rango dias mes :" +
hoy.range(ChronoField.DAY_OF_MONTH));
System.out.println("Rango dias año :" +
hoy.range(ChronoField.DAY_OF_YEAR));
}
Nos facilita el rango de días para el mes actual, y para el año actual
toEpochDay(), toString()
long toEpochDay()
String toString()
Convierte la fecha en numero de dias transcurridos desde 1/1/1970, o la facilita en formato string como 2022-11-13
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
System.out.println("Fecha :" +
hoy.toString());
System.out.println("to epoch :" +
hoy.toEpochDay());
}
Presenta en consola
until()
Period until(ChronoLocalDate endDateExclusive)
Obtiene la distancia, en Period, que hay entre dos fechas
long until(Temporal endExclusive, TemporalUnit unit)
Obtiene la distancia que hay entre dos fechas, en las unidades indicadas
En el ejemplo, obtenemos la distancia en Periodo y en numero de dias
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2022, Month.AUGUST, 13);
System.out.println("d1 :" + d1);
LocalDate d2 = LocalDate.of(2024, Month.APRIL, 13);
System.out.println("d2 :" + d2);
Period p = d1.until(d2);
System.out.println("Period :" + p);
long dias = d1.until(d2, ChronoUnit.DAYS);
System.out.println("Period :" + dias);
}
Que nos presentará
format()
String format(DateTimeFormatter formatter)
Formatea la fecha según la forma deseada
En el ejemplo, se muestran algunos formatos. Es conveniente revisar DateTimeFormatter
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
String formattedDate = hoy.format(DateTimeFormatter
.ofLocalizedDate(FormatStyle.LONG));
System.out.println("LONG format : " + formattedDate);
formattedDate = hoy.format(DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM));
System.out.println("MEDIUM format : " + formattedDate);
formattedDate = hoy.format(DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT));
System.out.println("SHORT format : " + formattedDate);
formattedDate = hoy.format(DateTimeFormatter
.ofLocalizedDate(FormatStyle.FULL));
System.out.println("FULL format : " + formattedDate);
String formateado = hoy.format(DateTimeFormatter.ofPattern("dd - MMM - yy"));
System.out.println("Formato manual..: " + formateado);
}
No presenta
adjustInto()
Temporal adjustInto(Temporal temporal)
Obtiene un objeto temporal tras aplicarle al LocalDate el ajuste indicado. El objeto obtenido esta limitado por el tipo de ajuste
En el ejemplo, vemos como podemos cambiar una fecha, sin modificar la hora ni la zona
public static void main(String[] args) {
ZonedDateTime date = ZonedDateTime.now();
System.out.println(date);
LocalDate date1 = LocalDate.parse("2017-02-03");
date = (ZonedDateTime)date1.adjustInto(date);
System.out.println(date);
}
Nos presenta
atStartOfDay(), atTime()
LocalDateTime atStartOfDay()
ZonedDateTime atStartOfDay(ZoneId zone)
LocalDateTime atTime(int hour, int minute)
LocalDateTime atTime(int hour, int minute, int second)
LocalDateTime atTime(int hour, int minute, int second, int nanoOfSecond)
LocalDateTime atTime(LocalTime time)
OffsetDateTime atTime(OffsetTime time)
Combina el LocalDate con los valores facilitados para obtener un objeto temporal de fecha y hora
En el ejemplo, obtenemos un LocalDateTime con la hora de inicio de dia (00:00) y luego otro con las 14:20
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
System.out.println("hoy : " + hoy);
LocalDateTime ahora = hoy.atStartOfDay();
System.out.println("at StartOfDay : " + ahora);
LocalDateTime despues = hoy.atTime(14,20);
System.out.println("at 14:20 : " + despues);
}
y su resultado
Conclusión
La clase LocalDate, mantiene una fecha (dia, mes y año) y puede ser reutilizados en el resto de clases de la api java.time
Este articulo detalle una de las clases de la api java.time descritas anteriormente en el indice que se facilito sobre este tema
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.