Convertir OffsetDateTime a LocalDate

Convertir OffsetDateTime a LocalDate

Convertir OffsetDateTime a LocalDate


En esta entrada vamos a ver como podemos convertir OffsetDateTime a LocalDate y LocalDateTime y además a LocalTime en Java. Estos tipos de fecha fueron introducido en Java 8 dentro del paquete java.time.

OffsetDateTime representa un date time con un offset. El tipo de objeto OffsetDateTime almacena la fecha completa y el tiempo con precisión de nanosegundos.

La diferencia de OffsetDateTime y LocalDateTime, es que LocalDateTime no lleva la información de Zone (la zona).

Por otro lado la diferencia entre OffsetDateTime y LocalDate, es que LocalDate únicamente muestra la fecha de años día y mes.

Además vamos a ver, también, como podemos convertir de un OffsetDateTime a LocalTime. La diferencia entre LocalTime y OffsetDateTime es que LocalTime únicamente nos devuelve el tiempo del OffsetDateTime.

Vamos a ver diferentes fechas con su valor:

  • OffsetDateTime: 2017-11-02T10: 15: 30 + 01: 00
  • LocaDateTime: 2023-06-12T13:30:10.106680
  • LocalDate: 2018-10-05
  • LocalTime: 20:19:27.109

Convertir OffsetDateTime a LocalDateTime en Java

Para convertir un tipo OffsetDateTime a LocalDateTime en Java, vamos a hacer uso del método toLocalDateTime. Vamos a verlo mejor con un ejemplo:

	@Test
	public void given_offsetDateTime_when_convert_to_localDateTime_then_return_localDateTime() {

		OffsetDateTime offsetDateTime = OffsetDateTime.now();

		LocalDateTime localDateTime = offsetDateTime.toLocalDateTime();

		assertAll(() -> {
			assertEquals(offsetDateTime.getYear(), localDateTime.getYear()), 
			assertEquals(offsetDateTime.getMonth(), localDateTime.getMonth()), 
			assertEquals(offsetDateTime.getDayOfMonth(), localDateTime.getDayOfMonth())

		});
	}

En el ejemplo anterior hemos hecho uso de assertAll para comparar el mes, el año y el día del mes.

Convertir OffsetDateTime a LocalDate en Java

OffsetDateTime nos permite convertir a LocalDate a través del método toLocalDate. Vamos a ver un ejemplo con un Test

	@Test
	public void given_offsetDateTime_when_convert_to_localDate_then_return_localDate() {

		OffsetDateTime offsetDateTime = OffsetDateTime.now();

		LocalDate localDate = offsetDateTime.toLocalDate();

		assertAll(() -> {
			assertEquals(offsetDateTime.getMonth(), localDate.getMonth()),
			assertEquals(offsetDateTime.getMonth(), localDate.getMonth()),
			assertEquals(offsetDateTime.getDayOfMonth(), localDate.getDayOfMonth())

		});
	}

Convertir OffsetDateTime a LocalTime en Java

OffsetDateTime también nos permite convertir a LocalTime, es decir, extraer el tiempo del objeto OffsetDateTime. Para poder obtener un objeto LocalTime vamos a hacer uso del método toLocalTime().

	@Test
	public void given_offsetDateTime_when_convert_to_localTime_then_return_localTime() {

		OffsetDateTime offsetDateTime = OffsetDateTime.now();

		LocalTime localTime = offsetDateTime.toLocalTime();

		assertAll(() -> {
			assertEquals(offsetDateTime.getHour(), localTime.getHour()),
			assertEquals(offsetDateTime.getMinute(), localTime.getMinute()),
			assertEquals(offsetDateTime.getSecond(), localTime.getSecond())

		});
	}

En el test anterior hemos convertido un objeto OffsetDateTime a LocalTime con el método toLocalTime(). Para verificar que se ha convertido correctamente hemos hecho un assertAll() comparando la hora, el minuto y el segundo.

Conclusión

En esta entrada sobre como convertir OffsetDateTime a LocalDate y a LocalDateTime y LocalTime en Java, hemos visto lo fácil que es realizar una conversión de tipo a tres objetos del paquete java.time. El API de java.time facilita las conversiones de una manera fácil y sencilla a través de un método para realizar la conversión.


3 pensamientos sobre “Convertir OffsetDateTime a LocalDate

  1. Fantástica entrada, como siempre, Noel. Me ha surgido una duda. Habitualmente para tratar con zonas horarias había usado ZonedDateTime, igual introducido en Java 8. ¿Qué diferencia habría entre ésta y OffsetDateTime explicada en el artículo? Un saludo!

    1. Muchas gracias!!! OffsetDateTime básicamente representa el offset es decir, la diferencia en tiempo (hasta nanosegundos) de un utc, por ejemplo meridiano de Greenwich, en cambio, ZonedDateTime identifica una región, y contiene el localdatime, el ZoneId y el zoneoffset.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *