Cómo usar la biblioteca JodaTime en Java

283

En este artículo revisaremos cómo usar la biblioteca Java de código abierto Joda Time. Esta biblioteca, como se menciona en el artículo de bibliotecas Java de código abierto, provee de un motor para interactuar con fechas y tiempos con soporte para Java 7 y menores, debido a que Java 8 introdujó java.time que soluciona los mismos problemas que esta biblioteca.

Esta biblioteca es muy útil para proyectos legacy (menores a Java 8) que requieren de una optimización de manejo de fechas y tiempos con objetos que nos proporcionan métodos y atributos muy útiles para el manejo de no solo fechas y tiempos, si no operaciones entre ellos, así como objetos que representan instantes, duraciones e intervalos.

Versión de Java

Recuerda que esta biblioteca es útil para proyectos que usan Java 7 o inferior, para versiones posteriores deberás utilizar la especificación nativa de Java: java.time.

  <properties>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  	<java.version>1.7</java.version>
  </properties>

Maven

Como con cualquier biblioteca, el primer paso es agregar la dependencia a nuestro proyecto, mediante Maven o Gradle, actualmente en su versión 2.10:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10</version>
</dependency>

Set de pruebas

Antes de pasar al código de Joda, vamos a crear un pequeño set de pruebas para asegurar el correcto comportamiento de nuestro ejemplo. Nota que estas pruebas bien pueden aplicar para código hecho en la especificación para fechas de Java 7. Piensa también en el código que sería necesario para lograr los siguientes funcionamientos sin Joda:

  • Sumar o restar días/meses a una fecha.
  • Obtener el día de la semana o el mes del año y pasarlo a otro lenguaje (francés en este caso).
  • Crear un objeto de tipo fecha con un año, mes y día específicos.
@Log4j
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TimeTest {

	@Test
	public void testDateSubstraction() {
		Date date = DatesWithJoda.substratDate(new Date(), 18);
		assertTrue(date instanceof Date);
		log.info(date);
	}

	@Test
	public void testDateAddition() {
		Date date = DatesWithJoda.additionDate(new Date(), 4);
		assertTrue(date instanceof Date);
		log.info(date);
	}
	
	@Test
	public void testMonthOfTheYear() {
		String month = DatesWithJoda.getMonthOfTheYear(new Date());
		assertTrue(month instanceof String);
		log.info(month);
	}
	
	@Test
	public void testDayOfTheWeek() {
		String day = DatesWithJoda.calculateDayOfTheWeek(new Date());
		assertTrue(day instanceof String);
		log.info(day);
	}

	@Test
	public void testSpecificDate() {
		Date date = DatesWithJoda.createSpecificDate(2918, 1, 31);
		assertTrue(date instanceof Date);
		log.info(date);
	}

}

Manejo de fechas y tiempos con Joda Time

Finalmente, creamos nuestro código en Joda para demostrar lo fácil que es el uso de esta biblioteca y lo mucho que nos puede ayudar con el manejo de tiempos y fechas. Nota que estamos logrando las funcionalidades anteriormente descritas con una sola línea de código. Piensa nuevamente en las líneas de código necesarias con Java 7 para lograr la misma funcionalidad.

@UtilityClass
public class DatesWithJoda {
	
	public static String getMonthOfTheYear(Date sample) {
		return new DateTime(sample).monthOfYear().getAsText(Locale.FRANCE);
	}
	
	public static String calculateDayOfTheWeek(Date sample) {
	
		return new DateTime(sample).dayOfWeek().getAsText(Locale.FRANCE);
	}
	
	public static Date substratDate(Date sample, int days) {
		return new DateTime(sample).plus(Period.days(days)).toDate();
	}

	public static Date additionDate(Date sample, int months) {
		return new DateTime(sample).plus(Period.months(months)).toDate();
	}
	
	public static Date createSpecificDate(int year, int month, int day) {
		return new DateTime().withDate(year, month, day).toDate();
	}
	
}

Resultados

Observa y compara los resultados contra los parametros que pasan las pruebas a las unidades. Nota cómo las impresiones del día de la semana y mes del año están en francés tal cual se esperaba.


Puedes ver el uso de Joda Time en un proyecto completo de Java con Spring en el siguiente repositorio de Github: https://github.com/chuucks/SPRING-REST-API

Comments

comments