Clases Calendar y GregorianCalendar

La clase Calendar es una clase abstract que dispone de métodos para convertir objetos de la clase Date en enteros que representan fechas y horas concretas. La clase GregorianCalendar es la única clase que deriva de Calendar y es la que se utilizará de ordinario.

Java tiene una forma un poco particular para representar las fechas y horas:

1. Las horas se representan por enteros de 0 a 23 (la hora «0» va de las 00:00:00 hasta la 1:00:00), y los minutos y segundos por enteros entre 0 y 59.

2. Los días del mes se representan por enteros entre 1 y 31 (lógico).

3. Los meses del año se representan mediante enteros de 0 a 11 (no tan lógico).

4. Los años se representan mediante enteros de cuatro dígitos. Si se representan con dos dígitos, se resta 1900. Por ejemplo, con dos dígitos el año 2000 es para Java el año 00.

La clase Calendar tiene una serie de variables miembro y constantes (variables final) que pueden resultar muy útiles:

• La variable int AM_PM puede tomar dos valores: las constantes enteras AM y PM.

• La variable int DAY_OF_WEEK puede tomar los valores int SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY y SATURDAY.

• La variable int MONTH puede tomar los valores int JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER. Para hacer los programas más legibles es preferible utilizar estas constantes simbólicas que los correspondientes números del 0 al 11.

• La variable miembro HOUR se utiliza en los métodos get() y set() para indicar la hora de la mañana o de la tarde (en relojes de 12 horas, de 0 a 11). La variable HOUR_OF_DAY sirve para indicar la hora del día en relojes de 24 horas (de 0 a 23).

• Las variables DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH, DAY_OF_MONTH (o bien DATE), DAY_OF_YEAR, WEEK_OF_MONTH, WEEK_OF_YEAR tienen un significado evidente.

• Las variables ERA, YEAR, MONTH, HOUR, MINUTE, SECOND, MILLISECOND tienen también un significado evidente.

• Las variables ZONE_OFFSET y DST_OFFSET indican la zona horaria y el desfase en milisegundos respecto a la zona GMT.

La clase Calendar dispone de un gran número de métodos para establecer u obtener los distintos valores de la fecha y/u hora. Algunos de ellos se muestran a continuación. Para más información, se recomienda utilizar la documentación de JDK 1.2.

Compiled from Calendar.java
public abstract class java.util.Calendar extends java.lang.Object implements java.io.Serializable, java.lang.Cloneable {
protected long time; protected boolean isTimeSet;
protected java.util.Calendar();
protected java.util.Calendar(java.util.TimeZone,java.util.Locale); public abstract void add(int, int);
public boolean after(java.lang.Object); public boolean before(java.lang.Object); public final void clear();
public final void clear(int); protected abstract void computeTime();
public boolean equals(java.lang.Object); public final int get(int);
public int getFirstDayOfWeek();
public static synchronized java.util.Calendar getInstance();

public static synchronized java.util.Calendar getInstance(java.util.Locale); public static synchronized java.util.Calendar getInstance(java.util.TimeZone); public static synchronized java.util.Calendar getInstance(java.util.TimeZone,
java.util.Locale);
public final java.util.Date getTime(); protected long getTimeInMillis(); public java.util.TimeZone getTimeZone(); public final boolean isSet(int);
public void roll(int, int);
public abstract void roll(int, boolean); public final void set(int, int);
public final void set(int, int, int);
public final void set(int, int, int, int, int); public final void set(int, int, int, int, int, int); public final void setTime(java.util.Date);
public void setFirstDayOfWeek(int); protected void setTimeInMillis(long);
public void setTimeZone(java.util.TimeZone); public java.lang.String toString();

La clase GregorianCalendar añade las constante BC y AD para la ERA, que representan respectivamente antes y después de Jesucristo. Añade además varios constructores que admiten como argumentos la información correspondiente a la fecha/hora y –opcionalmente– la zona horaria.

A continuación se muestra un ejemplo de utilización de estas clases. Se sugiere al lector que cree y ejecute el siguiente programa, observando los resultados impresos en la consola.

import java.util.*;
public class PruebaFechas {
public static void main(String arg[]) { Date d = new Date();
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(d);

System.out.println(«Era:                        «+gc.get(Calendar.ERA));

System.out.println(«Year:                       «+gc.get(Calendar.YEAR));

System.out.println(«Month:                     «+gc.get(Calendar.MONTH));

System.out.println(«Dia del mes:          «+gc.get(Calendar.DAY_OF_MONTH));

System.out.println(«D de la S en mes:»

+gc.get(Calendar.DAY_OF_WEEK_IN_MONTH));

System.out.println(«No de semana:         «+gc.get(Calendar.WEEK_OF_YEAR));

System.out.println(«Semana del mes: «+gc.get(Calendar.WEEK_OF_MONTH));

System.out.println(«Fecha:                     «+gc.get(Calendar.DATE));

System.out.println(«Hora:                       «+gc.get(Calendar.HOUR));

System.out.println(«Tiempo del dia:  «+gc.get(Calendar.AM_PM));

System.out.println(«Hora del dia:         «+gc.get(Calendar.HOUR_OF_DAY));

System.out.println(«Minuto:                   «+gc.get(Calendar.MINUTE));

System.out.println(«Segundo:                 «+gc.get(Calendar.SECOND));

System.out.println(«Dif. horaria:         «+gc.get(Calendar.ZONE_OFFSET));

}
Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra}