Introducción
Java 8 presentó la nueva API de Fecha y Hora, que está inspirada en la biblioteca JodaTime. Soluciona las limitaciones de la API de Fecha existente. En este laboratorio, aprenderemos a usar la nueva API de Fecha y Hora para manipular fechas y horas.
Creando instancias de LocalDate
La clase LocalDate se utiliza para representar una fecha en el formato ISO estándar (aaaa-mm-dd). No incluye la hora y no admite zonas horarias.
Podemos crear una instancia de la clase LocalDate mediante el método now(). Capturará la fecha actual según el reloj del sistema.
import java.time.LocalDate;
public class DateTimeExample {
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now();
System.out.println("Current Date: " + currentDate);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
Current Date: 2021-08-13
Analizando una cadena de fecha
Podemos crear una instancia de la clase LocalDate utilizando una representación en cadena de una fecha.
import java.time.LocalDate;
public class DateTimeExample {
public static void main(String[] args) {
String str = "2021-08-13";
LocalDate date = LocalDate.parse(str);
System.out.println("Date: " + date);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
Date: 2021-08-13
Métodos plus y minus
Podemos sumar o restar días, meses o años a una fecha utilizando el método plusDays() o minusDays(). También tenemos métodos similares para modificar meses y años.
import java.time.LocalDate;
public class DateTimeExample {
public static void main(String[] args) {
LocalDate currDate = LocalDate.now();
LocalDate yesterday = currDate.minusDays(1);
LocalDate tomorrow = currDate.plusDays(1);
System.out.println("Current Date: " + currDate);
System.out.println("Tomorrow's Date: " + tomorrow);
System.out.println("Yesterday's Date: " + yesterday);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
Current Date: 2021-08-13
Tomorrow's Date: 2021-08-14
Yesterday's Date: 2021-08-12
Métodos Getter
La clase LocalDate contiene varios métodos get para obtener diferentes información de la LocalDate, como el día de la semana o el día del mes, etc.
import java.time.DayOfWeek;
import java.time.LocalDate;
public class DateTimeExample {
public static void main(String[] args) {
LocalDate currDate = LocalDate.now();
DayOfWeek dayOfWeek = currDate.getDayOfWeek();
int dayOfMonth = currDate.getDayOfMonth();
int dayOfYear = currDate.getDayOfYear();
System.out.println("Date: " + currDate);
System.out.println("Day of Week: " + dayOfWeek);
System.out.println("Day of Month: " + dayOfMonth);
System.out.println("Day of Year: " + dayOfYear);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
Date: 2021-08-13
Day of Week: VIERNES
Day of Month: 13
Day of Year: 225
Comparando fechas
Podemos comparar fechas utilizando los métodos isBefore() e isAfter() para comprobar cuál es mayor.
import java.time.LocalDate;
public class DateTimeExample {
public static void main(String[] args) {
LocalDate currDate = LocalDate.now();
LocalDate tomorrow = currDate.plusDays(1);
LocalDate yesterday = currDate.minusDays(1);
System.out.println("Current date is after yesterday's date: " + currDate.isAfter(yesterday));
System.out.println("Current date is before tomorrow's date: " + currDate.isBefore(tomorrow));
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
Current date is after yesterday's date: true
Current date is before tomorrow's date: true
Creando instancias de LocalTime
Para crear una instancia de LocalTime, podemos utilizar el método now(), of() o parse(). El método now() utilizará el reloj del sistema para obtener la hora actual. Los métodos of() y parse() pueden crear un LocalTime de acuerdo con los parámetros pasados.
import java.time.LocalTime;
public class DateTimeExample {
public static void main(String[] args) {
LocalTime currentTime = LocalTime.now();
LocalTime t1 = LocalTime.of(5, 32, 44);
LocalTime t2 = LocalTime.parse("05:32:44");
System.out.println(currentTime);
System.out.println(t1);
System.out.println(t2);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
17:43:08.749240
05:32:44
05:32:44
Métodos de Adición y Sustracción
Podemos utilizar los métodos plus() y minus() para manipular instancias de LocalTime.
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
public class DateTimeExample {
public static void main(String[] args) {
LocalTime t1 = LocalTime.of(5, 32, 44);
LocalTime t2 = t1.plus(2, ChronoUnit.HOURS);
LocalTime t3 = t1.minusMinutes(10);
System.out.println(t1);
System.out.println(t2);
System.out.println(t3);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
05:32:44
07:32:44
05:22:44
Creando instancias de LocalDateTime
La clase LocalDateTime es una combinación de las clases LocalDate y LocalTime. Una instancia de LocalDateTime contiene un componente de fecha y un componente de hora.
import java.time.LocalDateTime;
public class DateTimeExample {
public static void main(String[] args) {
LocalDateTime currDateTime = LocalDateTime.now();
LocalDateTime dt1 = LocalDateTime.of(2020, 8, 13, 5, 32);
LocalDateTime dt2 = LocalDateTime.parse("2020-08-13T05:32");
System.out.println(currDateTime);
System.out.println(dt1);
System.out.println(dt2);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
2021-08-13T17:46:48.837697
2020-08-13T05:32
2020-08-13T05:32
Trabajando con fusos horarios
Las clases discutidas anteriormente no admiten fusiones horarias. La clase ZonedDateTime proporciona esta funcionalidad. Podemos utilizar la clase ZoneId para identificar diferentes fusiones horarias.
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class DateTimeExample {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now();
ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
ZonedDateTime zdtT = ZonedDateTime.now(zoneTokyo);
ZoneId zoneLondon = ZoneId.of("Europe/London");
ZonedDateTime zdtL = ZonedDateTime.now(zoneLondon);
System.out.println(zdt);
System.out.println(zdtT);
System.out.println(zdtL);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
2021-08-13T18:09:25.352237+05:30[Asia/Calcutta]
2021-08-13T21:39:25.356244+09:00[Asia/Tokyo]
2021-08-13T13:09:25.357316+01:00[Europe/London]
Formateando fechas
Java 8 proporciona una función format() para formatear una fecha en una cadena utilizando un patrón particular.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExample {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.now();
String dateStr1 = dateTime.format(DateTimeFormatter.ISO_WEEK_DATE);
String dateStr2 = dateTime.format(DateTimeFormatter.BASIC_ISO_DATE);
String dateStr3 = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String dateStr4 = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss"));
System.out.println(dateStr1);
System.out.println(dateStr2);
System.out.println(dateStr3);
System.out.println(dateStr4);
}
}
Guarde y ejecute el código con el siguiente comando:
javac DateTimeExample.java && java DateTimeExample
Veremos la salida siguiente:
2021-W32-5
20210813
2021-08-13T18:16:57.675704
13/08/2021 06:16:57
Resumen
En este laboratorio, aprendimos cómo utilizar la API de fechas y horas de Java 8 para manipular fechas y horas. Aprendimos cómo crear instancias de las clases LocalDate, LocalTime y LocalDateTime, manipularlas utilizando los métodos plus() y minus() y obtener información de ellas utilizando métodos getters. Además, aprendimos cómo trabajar con fusiones horarias utilizando la clase ZonedDateTime y cómo formatear fechas utilizando la clase DateTimeFormatter.



