Posts tagged ‘JodaTime’

Joda Time: rediseñando las librerías de fechas en Java

Aunque había oído hablar hace tiempo de Joda Time, acabo de profundizar algo más en esta librería para el manejo de fechas en Java gracias a este buen artículo de OCI ( en inglés).

La utilización de fechas en Java siempre ha tenido algunos problemas asociados, desde la molesta aunque salvable asignación de los meses desde cero (el mes 1 es febrero) hasta la complejidad para realizar algunos cálculos relativamente simples como el cálculo de días entre dos fechas.

Para solucionar estos problemas nació Joda Time y además ahora ha sido el punto de partida del JSR 310 (Java Specification Request) por lo que algún día lo podríamos encontrar como el estándar en el lenguaje.

Joda Time define los llamados instantes, que representan un día y hora determinados en un lugar y calendario determinados. Es decir, una definición sin posibilidad de confusión. La clase más utilizada para definir un instante es DateTime.

Un segundo concepto que define Joda Time son los parciales, compuestos por partes de un instante, y que por tanto no definen univocamente una fecha. Por ejemplo LocalDateTime no incluye información referente a la zona horaria o el calendario.

Otro cocepto importante en Joda Time son los intervalos, definidos por dos instantes.

Finalmente, los últimos conceptos que vamos a ver son la duración y los periodos. Duración representa una cantidad de milisegundos, mientras que un periodo puede estar definido en días, meses u otras unidades (o un conjunto de ellas).

Bueno, y como al final siempre es mejor una imagen (o un trozo de código) que mil palabras, pues vamos a mostrar algunos ejemplos.

public void daysBetween() {
		//Instante actual en la cronología por defecto
		//y en la zona horaria del sistema
		DateTime today = new DateTime();

		//Instante a medianoche del 1 de enero de 2008
		DateMidnight jan01 = new DateMidnight(2008, 1, 1);

		System.out.println("Días desde el 1 de enero: " + Days.daysBetween(jan01, today).getDays());
	}

Como vemos, es bastante sencillo calcular los días entre dos instantes determinados.

Vamos a ver con otro ejemplo lo sencillo que resulta calcular nuevas fechas, olvidándonos de cálculos de días por mes u otras complicaciones.

public void incrementDates() {
		//Instante a medianoche del 11 de junio de 2008
		DateMidnight jun11 = new DateMidnight(2008, 6, 11);
		
		//Le añadimos 5 días
		DateMidnight plus5Days = jun11.plusDays(5);
		//Le añadimos un mes
		DateMidnight plusMonth = jun11.plusMonths(1);
		//Le añadimos 6 meses
		DateMidnight plus6Month = jun11.plusMonths(6);
		
		System.out.println("Fecha inicial: " + jun11.toString());
		System.out.println("Fecha más 5 días: " + plus5Days.toString());
		System.out.println("Fecha más 1 mes: " + plusMonth.toString());
		System.out.println("Fecha más 1 mes: " + plus6Month.toString());
	}

Esto produce la siguiente salida:

Fecha inicial: 2008-06-11T00:00:00.000+02:00
Fecha más 5 días: 2008-06-16T00:00:00.000+02:00
Fecha más 1 mes: 2008-07-11T00:00:00.000+02:00
Fecha más 1 mes: 2008-12-11T00:00:00.000+01:00

Fijaos en el +2 debido a que mi zona horaria es GMT+1 y estamos en horario de verano (daylight savings), pero que en noviembre ya estamos fuera del horario de verano.

Por último, vamos a ver alguna facilidad más que nos da Joda Time:

public void checkFeatures() {
		DateTime today = new DateTime();
		
		DateTime.Property month = today.monthOfYear();
		System.out.println("Mes: " + month.getAsShortText());
		System.out.println("Mes: " + month.getAsText());
		System.out.println("Mes: " + month.getAsText(Locale.ENGLISH));
		
		DateTime.Property week = today.weekOfWeekyear();
		System.out.println("Semana: " + week.getAsText());
	}

Que provoca la siguiente salida:

Mes: jul
Mes: julio
Mes: July
Semana: 29

Y hasta aquí llega mi pequeña revisión de esta librería que nos puede facilitar bastante el trabajo con fechas en Java.

Anuncios

15 julio 2008 at 12:05 pm 6 comentarios


Mi perfil

View Miguel Orbegozo's profile on LinkedIn

Feedjit

Feeds

Otros…

BlogESfera Directorio de Blogs Hispanos - Agrega tu Blog

Bitacoras.com

Add to Technorati Favorites