Está en la página 1de 22

Operaciones

No todo debe ser tan complejo y abstracto como lo es con las clases que vimos anteriormente.
Java posee otras clases que nos facilitan realizar operaciones como suma, resta, obtener un da y
hora exactos, entre otras.
Estas funcionalidades las obtenemos de dos clases en particular; una es abstracta:
java.util.Calendar (a partir de ahora me referir a ella como Calendar) y permite obtener campos
enteros como da, mes y ao de objetos de tipo java.util.Date o que hereden de l. La otra
java.util.GregorianCalendar (a partir de ahora simplemente GregorianCalendar) es una
implementacin del calendario gregoriano que es usado en casi todo el mundo (es el que
conocemos).
Calendar
Segn la documentacin del API de java, la clase Calendar es una clase abstracta base para
convertir entre un objeto de tipo Date (java.util.Date) y un conjunto de campos enteros como
YEAR (ao), MONTH (mes), DAY (da), HOUR (hora), etc. Una subclase de Calendar
representa una fecha de acuerdo a las reglas de un calendario especfico. La plataforma provee
una subclase concreta de Calendar: GregorianCalendar. Futuras subclases podran representar
varios tipos de calendarios lunares usados en diferentes lugares del mundo.
Esto puede haber sonado un tanto abstracto pero no nos confundamos. La clase Calendar tiene
mucho del comportamiento que esperaramos de la clase java.util.Date, es decir, cuando
obtenemos una instancia de la clase Calendar obtenemos un instante de tiempo especfico con
gran precisin similar a lo que obtenemos con la clase date. S es cierto, podemos decir aqu que
los milisegundos juegan un papel fundamental en esta clase; pero el verdadero sentido de la clase
Calendar no es obtener un instante de tiempo sino extraerle datos.
Recordemos que la clase java.util.Date tiene mtodos que permiten obtener el ao, mes y da,
pero estos mtodos estn obsoletos precisamente por que para eso existe Calendar y de hecho
cuando usamos el mtodo getYear() de la clase java.util.Date esta recurre a las funcionalidades
que posee la clase Calendar.
Hay que mencionar tambin que obtener un instante de tiempo especfico y diferente del actual
es supremamente sencillo con esta clase, indicndole simplemente el da, mes y ao con que se
desea trabajar, o se puede especificar an ms dando hora, minuto y segundo deseado. Veamos:
El mtodo getInstance() de la clase nos devuelve una subclase de Calendar con el tiempo
ajustado a la hora actual, y usamos el mtodo set(args) para forzarlo a tomar la fecha deseada:
Calendar ahoraCal = Calendar.getInstance();
System.out.println(ahoraCal.getClass());
ahoraCal.set(2004,1,7);
System.out.println(ahoraCal.getTime());
ahoraCal.set(2004,1,7,7,0,0);
System.out.println(ahoraCal.getTime());
La primera lnea devuelve una instancia de GregorianCalendar con la fecha y hora actual y el
mtodo getTime() retorna un objeto de tipo java.util.Date que se muestra en consola
posteriormente.
En la tercera lnea se usa el mtodo set para ajustar la fecha al "7 de enero de 2004" y en la
quinta ponemos la misma fecha pero esta vez ajustando tambin la hora, minutos y seg qundos,
comoueda: "7 de la noche del 7 de enero de 2004".
La salida en consola ser (note que tiene el formato de java.util.Date):
class java.util.GregorianCalendar
Sat Feb 07 19:55:47 GMT-05:00 2004
Sat Feb 07 07:00:00 GMT-05:00 2004
Extraer los datos
La clase Calendar tiene un nico mtodo get para obtener todos sus datos para lo cual se ayuda
de una serie de atributos constantes que permiten obtener o ajustar un atributo determinado de la
fecha; los ms importantes son (al lado los valores que representan):
-YEAR: Ao.
-MONTH: Mes.
-DATE, DAY_OF_MONTH: Da del mes.
-DAY_OF_WEEK: Da de la semana entre 1 (MONDAY) y 7 (SATURDAY).
-HOUR: Hora antes o despus del medio da (en intervalos de 12 horas).
-HOUR_OF_DAY: Lo hora absoluta del da (en intervalos de 24 horas).
-MINUTE: El minuto dentro de la hora.
-SECOND: El segundo dentro del minuto.
Estn tambin los atributos que representan los meses, como: JANUARY, MARCH, JUNE,
DECEMBER, etc. que van desde 0 (JANUARY) hasta 11 (DECEMBER).
Tambin hay atributos que representan los das: SUNDAY, TUESDAY, SATURDAY, etc. estos
empiezan con 1 (SUNDAY) y van hasta 7 (SATURDAY).
Hay ms atributos pero con estos es suficiente para los objetivos de este artculo, si deseas
concerlos todos recurre a la documentacin del lenguaje.
Para extraer algn atributo se usa el mtodo get pasndole como parmetro alguna de las
constantes que vimos anteriormente y el mtodo devuelve siempre un dato de tipo int; as para
obtener el ao , mes, da y hora, usaramos el siguiente cdigo:
System.out.println("ANYO: "+ahoraCal.get(Calendar.YEAR));
System.out.println("MES: "+ahoraCal.get(Calendar.MONTH));
System.out.println("DIA: "+ahoraCal.get(Calendar.DATE));
System.out.println("HORA: "+ahoraCal.get(Calendar.HOUR));
if (ahoraCal.get(Calendar.MONTH) == Calendar.JUNE){
System.out.println("ES JUNIO");
}else{
System.out.println("NO ES JUNIO");
}
Si el objeto tiene la fecha equivalente a 5:30 p.m. del 22 de junio de 2004 se ve la siguiente
salida:
ANYO: 2004
MES: 5
DIA: 22
HORA: 5
ES JUNIO
Modificar un atributo
Modificar un atributo de Calendar es tan sencillo como obtenerlo, solamente es necesario usar el
mtodo set(int atributo, int valor), en donde atributo es una de las constante mencionadas
anteriormente y valor es la cantidad que se le quiere asignar. Por ejemplo:
ahoraCal.set(Calendar.MONTH,Calendar.JANUARY) o ahoraCal.set(Calendar.YEAR, 1980)
ajustaran la fecha almacenada en el objeto ahoraCal a enero o al ao 1980 sin modificar ninguno
de los otros atributos.
Aclaremos esto con un ejemplo. Mi cumpleaos es en octubre 27 :-), y deseo saber que da lo
celebrar en el 2010; para eso obtengo una instancia de Calendar (que siempre devuelve un
objeto del tipo GregorianCalendar) y la ajusto hasta el 27 de octubre de 2010, luego obtengo el
nombre del dia, veamos:
Calendar cumpleCal = Calendar.getInstance();
cumpleCal.set(2010,9,27); //La hora no me interesa y recuerda que los meses
van de 0 a 11
int dia = cumpleCal.get(Calendar.DAY_OF_WEEK);
System.out.println(dia); //Da 4 = WEDNESDAY = MIRCOLES
La salida es: 4, lo que quiere decir que en el 2010 el 27 de octubre ser un da mircoles (as que
probablemente lo celebre el viernes 29 :-));
Clase GregorianCalendar y operaciones
Realizar operaciones como sumar o restar das no es algo que dependa directamente de Calendar
sino ms bien de una subclase de esta que implemente algn tipo de calendario usado, pues no
todos los calendarios tienen 12 meses ni aos de 365 das como el que nosotros (en casi todo
occidente) usamos.
Este calendario usado en occidente, llamado gregoriano fue adoptado por primera vez en 1582
por el imperio romano (o aproximadamente) y posteriormente se fue adoptando en muchos otros
pases, por ejemplo 1752 en Gran Bretaa y 1918 en Rusia.
A grandes rasgos sabemos que el calendario gregoriano consta de aos que son definidos por
cada traslacin (vuelta de la tierra alrededor del sol), cada ao tiene doce meses de los cuales 7
tienen 31 das, 4 tienen 30 das y 1 tiene 28 das excepto en aos bisiestos que tiene 29. Estos
aos bisiestos se implantaron para corregir el desfase que tenemos cada cuatro aos (un ao real
dura 365 das y 6 horas aproximandamente), regla completa para los aos bisiestos segn en
calendario gregoriano es la siguiente:
"Un ao es bisiesto si es divisible por 4, a menos que sea divisible por 100 y no por 400".
Todo esto quiz suene un poco tonto, pero es absolutamente necesario tenerlo claro para
entender el funcionamiento de la clase GregorianCalendar.
GregorianCalendar es una subclase de Calendar y es la implementacin directa del calendario
gregoriano (de hecho es la nica implementacin de un calendario en jdk1.4) tal y como lo
conocemos hoy da. Es con esta clase con la que podemos sumar 2 3 das a una fecha sin
preocuparnos por desbordamientos o recalcular meses o aos, pues ella lo hace automticamente
tomando en cuenta las reglas en los prrafos anteriores.
De igual forma podemos obtener informacin como el da de la semana o la semana del ao que
fue una fecha determinada.
Los mtodos roll() y add()
Anteriormente vimos los mtodos set() y get() de la clase Calendar para obtener fechas y los
datos de esas fechas, ahora veremos los mtodos add() y roll() que nos permiten avanzar un
tiempo exacto sobre los datos obtenidos anteriormente.
El mtodo add(CONSTATE, valor) suma algebraicamente valor a una fecha; el valor a sumar
asume el significado dado por CONSTANTE, que es una de las definidas para la clase y que se
mencionaron en la seccin anterior (MONTH, YEAR, SECOND, etc).
Por ejemplo agreguemos 3 das y 2 meses a la fecha actual:
Calendar hoy = Calendar.getInstance();
hoy.add(Calendar.DATE, 3);
hoy.add(Calendar.MONTH, 2);
System.out.println(hoy.getTime());
Ahora restemos 5 aos y 50 das (Prebalo en tu PC):
Calendar hoy = Calendar.getInstance();
hoy.add(Calendar.YEAR, -5);
hoy.add(Calendar.DATE, -50);
System.out.println(hoy.getTime());
Qu, restar 50 das?
Pues s, resulta que la clase GregorianCalendar es inteligente al momento de hacer estos
clculos y se basa en ciertas reglas (2 segn la documentacin) para realizar estas operaciones;
tal y como nosotros lo haramos al sumar 50 das, cuando lleguemos al final del mes actual
empezamos a contar a partir del mes siguiente y lo mismo si cambiara el ao, es decir, cuando
llegue al lmite superior o inferior de uno de estos intervalos se empezar a afectar el intervalo
siguiente segn la lgica de la operacin.
Para aclarar lo anterior debemos conocer el orden de los campos que se han mencionado en el
artculo (solo pondr los ms significativos); aqu van en orden descendente:
YEAR
MONTH
DATE, DAY_OF_MONTH
HOUR
MINUTE
SECOND
Cuando estamos sumando los campos se afectan de abajo hacia arriba (SECOND YEAR) y
restando el orden es inverso (YEAR SECOND), as que al momento de restar 50 das se
decrementa el atributo DAY_OF_MONT (o DATE) hasta 1, luego se decrementa en 1 el atributo
MONTH y DAY_OF_MONTH inicia en el nmero de das del mes; si antes de decrementar
MONTH est en su lmite inferior (JANUARY) YEAR tambin debe ser recalculado (disminuye
en 1) y MONTH regresa a su lmite superior al igual que DATE.
Que enredo!
Es cierto, todo esto puede parecer un laberinto (especialmente por que no me explico bien), pero
estoy seguro que con un poco de cdigo se despejar el panorama.
Para todos los ejemplos partiremos del 10 de noviembre de 1998 a las 7:00am.
Calendar cal = Calendar.getInstance();
cal.set(1998,10,10,7,0,0);

cal.add(Calendar.SECOND,52);
cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -3);
cal.add(Calendar.YEAR,1);
//As la fecha sea 1999/8/10 09:00:52 (Agosto 10 de 1999)
System.out.println(cal.getTime());
Aqu ningn atributo lleg a su lmite superior o inferior y por tanto la nueva fecha se calcula
muy fcilmente.
Para ver como incide una sola operacin en varios atributos, sumaremos a la fecha 70 minutos y
22 das; como el lmite superior de los minutos (60) es sobrepasado, se debe incrementar el
atributo inmediatamente superior (HOUR), igual que al sobrepasar el lmite de das para el mes
(noviembre tiene 30 das) se incrementa el ao. As finalmente tendremos el 2 de diciembre de
1998 a las 8:10 am.
cal.add(Calendar.MINUTE, 70);
cal.add(Calendar.DATE, 22);
//As la fecha sea 1998/12/2 08:10:00 (Diciembre 2 de 1998)
System.out.println(cal.getTime());
Mtodo roll(CONSTATE, valor)
Est mtodo tiene un funcionamiento similar a add() excepto por que no modifica ningn otro
atributo, es decir, cuando el atributo dado por CONSTANTE llega a su lmite inferior o superior
cambia al lmite contrario pero sin modificar sus atributos siguientes. Seguramente suena un
tanto extrao este funcionamiento, pues con el mtodo set() podemos asignar un valor
directamente; segn la documentacin este mtodo se hizo para facilitar la funcionalidad en las
interfaces de usuario donde hay que especificar una fecha y tienen botones para incrementar o
decrementar alguno de los datos (creo que todos los hemos visto).
Si en el ejemplo anterior en vez de add() usamos roll() ya no obtendremos Diciembre 2 de 1998 a
8:10 am, sino Noviembre 2 de 1998 a las 7:10 am.
Note que solo cambian los valores que se especificaron directamente.
cal.roll(Calendar.MINUTE, 70);
cal.roll(Calendar.DATE, 22);
//As la fecha sea 1998/11/2 07:10:00 (Noviembre 2 de 1998)
System.out.println(cal.getTime());
En verdad el uso de roll no es muy comn excepto pues en ambientes grficos, los mtodos que
en verdad deben ser considerados, estudiados y probados son set(), get() y add().
Esto es todo por esta entrega, en el prximo artculo veremos como formatear una fecha para
mostrarla de forma comprensible, el parseo y algunos detalles no tan comunes de las clases
Calendar y GregorianCalendar.

Cmo manejar fechas en Java
Mircoles, septiembre 29th, 2010
Como no poda ser menos, el primer artculo tena que estar relacionado con el lenguaje de
programacin Java.
El manejo de fechas en Java puede resultar en un principio un poco menos intuitivo que en
otros lenguajes tales como PHP o Visual Basic. Sin embargo, para trabajar con fechas de una
forma ms cmoda, contamos con la clase java.util.Calendar.
Calendar es una clase base abstracta con la que podremos representar y manejar fechas
(objetos de tipo Date), as como modificar y obtener sus datos enteros tales como YEAR,
MONTH, DAY, etc
Para instanciar un objeto de clase Calendar, tendremos 2 opciones:
Opcin A: Utilizar el mtodo getInstance(), que nos proporcionar un objeto Calendar
cuyos campos han sido inicializados con la fecha y la hora actuales.
Opcin B: Utilizar el constructor de la clase GregorianCalendar. Esta clase es a su vez
una subclase de java.util.Calendar, que nos proporciona un calendario estndar usado
comunmente en la mayor parte del mundo.
A continuacin mostramos el cdigo de las 2 opciones mencionadas:
?
1
2
3
Date date = new Date();
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = new GregorianCalendar();
Una vez instanciado el objeto Calendar, ya podemos manejar las fechas a nuestro antojo.
Cmo extraer los datos individuales de la fecha?
A que os suenan los famosos getters y setters? pues esta clase no iba a ser menos.
La clase java.util.Calendar nos proporciona un nico mtodo get(int field) para extraer
cualquier atributo del calendario que indiquemos en el atributo field, tal y como veremos a
continuacin en el siguiente cdigo de ejemplo.
NOTA: Ten en cuenta que valores como el mes o el da de la semana comienzan por 0, no por 1.
?
1
2
3
4
5
// Instanciamos el objeto Calendar
Calendar calendar = Calendar.getInstance();
// Obtenemos el valor del ao, mes y da.
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
System.out.println("AO ACTUAL: " + year);
6
7
8
9
System.out.println("MES ACTUAL: " + month);
System.out.println("DA ACTUAL: " + date);
Cmo modificar los atributos o valores de la fecha?
Al igual que disponemos del mtodo get(int field) para obtener cualquier valor de una fecha,
disponemos tambin del mtodo set(int field, int value) para modificarlo.
Deberemos pasar 2 parmetros:
field: atributo de la fecha que queremos modificar
value: nuevo valor a asignar
Veamos a continuacin un ejemplo de cmo modificar los atributos ao, mes y da:
?
1
2
3
calendar.set(Calendar.YEAR, 2020);
calendar.set(Calendar.MONTH, 02); // OJO: Recueda que los valores de los
meses comienzan por 0.
calendar.set(Calendar.DATE, 30);
Adems del mtodo simple set(int field, int value), disponemos tambin de 3 mtodos ms
sobrecargados set que nos permitirn asignar fechas completas en un nico paso:
?
1
2
3
4
5
6
// Asignamos ao, mes y da.
calendar.set(2020, 02, 30);
// Asignamos ao, mes, da, horas y minutos.
calendar.set(2020, 02, 30, 19, 00);
// Asignamos ao, mes, da, horas, minutos y segundos.
calendar.set(2020, 02, 30, 19, 00, 55);
Cmo sumar y restar fechas?
He aqu uno de los mtodos ms tiles cuando queremos operar con fechas: add(int field, int
amount).
Con la misma estructura que el mtodo set(int field, int amount), podremos sumar (y por lo
tanto restar) cantidades de diferentes valores a una fecha.
field: atributo de la fecha que queremos modificar y cuya cantidad pasaremos en el
parmetro amount
amount: cantidad a sumar o restar (valores negativos) a la fecha
Viajemos en el tiempo y rejuvenezcamos 10 aos:
?
1
2
3
4
5
6
// Sumamos 30 minutos a la fecha actual.
calendar.add(Calendar.MINUTE, 30);
// Sumamos 100 das a la fecha actual.
calendar.add(Calendar.DATE, 100);
// Restamos 10 aos a la fecha actual.
calendar.add(Calendar.YEAR, -10);
Para ms informacin sobre la clase Calendar podis acceder tambin a la documentacin de Sun
(o de Oracle, como ms os guste).
Espero que el artculo os haya sido de utilidad. Como habis comprobado, la clase Calendar nos
facilita la vida cuando queremos manejar fechas en java, y es muy fcil e intuitiva de utilizar.
En prximas entregas, veremos cmo realizar ms operaciones con fechas.
El manejo de las fechas en java el temor de muchos el placer de otros.
Pero de ahora en adelante ya no sera as jugaremos y reiremos con estas. Empezaremos este
articulo nombrando a la clase Date del paquete java.util que es la representacin de un instante
de tiempo especifico en milisegundos, esta esta clase tiene muchos mtodos ya deprecados por lo
tanto no se recomienda el uso de ellos, por tal motivo realizaremos la mayor parte del manejo de
las fechas y horas con las clases Calendar y GregorianCalendar del mismo paquete java.util.
Estas clases nos hacen mucho mas fcil la obtencin de datos referentes a una fecha.
GregorianCalendar es una subclase de Calendar, esta ultima esta definida como abstracta y
posee una serie de constantes publicas que nos permiten obtener dicha informacin como por
ejemplo:
YEAR => Ao
MONTH => Mes (0-11)
DAYOFMONTH => Dia del Mes (0 - [28,29,30,31] depende del mes y ao)
HOUROFDAY => Hora (0 - 23)
etc...
y por otro lado el formato de las fechas y horas para mostrarlas al usuario final las trabajaremos
con la clase SimpleDateFormat.
Empecemos, para trabajar con la fecha y hora actual del sistema debemos obtener una instancia
de GregorianCalendar de la siguiente forma:
Calendar c = GregorianCalendar.getInstance();
este mtodo getInstance esta definido en la clase Calendar devuelve un Calendar con base en la
zona horaria.
Ahora veremos como podemos hacer uso de la fecha y hora tanto para consultar como para
manipular, gracias a estas clases. Lo primero que vamos a trabajar es la consulta de campos que
nos interesen por ejemplo; obtendremos el ao, mes, dia del mes, hora, minutos, segundos y
hasta el da del ao de la instancia que ya tenemos:
int ano = c.get(Calendar.YEAR);
int mes = c.get(Calendar.MONTH);
int diaDelMes = c.get(Calendar.DAY_OF_MONTH);
int hora = c.get(Calendar.HOUR_OF_DAY);
int minutos = c.get(Calendar.MINUTE);
int segundos = c.get(Calendar.SECOND);
int diaDelAno = c.get(Calendar.DAY_OF_YEAR);
...
Y todo as de fcil, Tambin encontramos constantes definidas para los meses y das de la
semana por ejemplo Calendar.JANUARY, Calendar.MONDAY, ...
y eso es todo as de sencillo, ahora veremos algunas formas de modificar los datos de la fecha a
travs de los mtodos set, add y roll
set: nos permite modificar el valor de un campo correspondiente a la instancia de
GregorianCalendar, tiene 4 variaciones la mas usada es la que recibe el valor del campo que se
va a modificar y el valor a establecer asi:
c.set(Calendar.YEAR, 2008);
y listo as de fcil le hemos indicado que el ao es 2008.
add: como vimos ahora mismo la fecha tiene el ao 2008 si queremos indicarle que es dos aos
mas basta con llamar a add as:
c.add(Calendar.YEAR, 2);
c.add(Calendar.HOUR, 25);
una caracterstica importante de esta funcin es que si aumentamos un valor como el ejemplo
donde decimos que sume 25 horas modifica todos los atributos por ejemplo para mi caso hoy es
20 de Julio del 2009 y despus de estos cambios es 21 de Julio del 2010.
roll: este mtodo funciona de manera muy similar al set excepto porque este no acomoda los
otros atributos como lo hace el set.
Ahora pasaremos a formatear fechas para de mostrarcelas a los usuarios finales, como comente
anteriormente trabajaremos con la clase SimpleDateFormat, esta clase pertenece al paquete
java.text y uno de sus tres constructores recibe un String que representa el formato en que
queremos mostrar las fechas pro ejemplo:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
lo que al formatear mediante el metodo format una fecha dara como resultado algo as:
2010/07/24
format recibe un objeto Date el cual obtendremos de nuestra instancia de GregorianCalendar a
travs del mtodo getTime el cual nos retorna un Date que representa el instante de tiempo de
nuestra fecha.
por ejemplo:
System.out.println(dateFormat.format(c.getTime()));
la clase SimpleDateFormat tambin nos permite obtener un objeto Date a travs de una cadena
de texto as:
try {
Date d = dateFormat.parse("2010/07/24");
System.out.println(dateFormat.format(d));
} catch (ParseException ex) {
ex.printStackTrace();
}
como observamos este mtodo lanza una Excepcin de tipo java.text.ParseException en caso
tal que la cadena no represente una fecha valida.
public abstract clase Calendar
extends Object se extiende de objetos
implements Serializable , Cloneable implementa Serializable , Cloneable
Calendar is an abstract base class for converting between a Date object and a set of integer
fields such as YEAR , MONTH , DAY , HOUR , and so on. Calendar es una clase base abstracta para la
conversin entre una Date objeto y un conjunto de campos enteros como YEAR , MONTH , DAY ,
HOUR , y as sucesivamente. (A Date object represents a specific instant in time with millisecond
precision. See Date for information about the Date class.) (A Date objeto representa un instante
concreto en el tiempo con precisin de milisegundos. Vea Date de informacin sobre la Date de
clase.)
Subclasses of Calendar interpret a Date according to the rules of a specific calendar system. Las
subclases de Calendar interpretar una Date de acuerdo a las reglas de un sistema de calendario
especfico. The JDK provides one concrete subclass of Calendar : GregorianCalendar . El
JDK proporciona una subclase concreta de Calendar : GregorianCalendar . Future subclasses
could represent the various types of lunar calendars in use in many parts of the world. subclases
futuras podran presentar los diferentes tipos de calendarios lunares en uso en muchas partes del
mundo.
Like other locale-sensitive classes, Calendar provides a class method, getInstance , for getting
a generally useful object of this type. Calendar 's getInstance method returns a
GregorianCalendar object whose time fields have been initialized with the current date and
time: Al igual que otras clases sensibles-regional, Calendar proporciona un mtodo de clase,
getInstance , para obtener un objeto de utilidad general de este tipo. Calendar 's getInstance
mtodo devuelve un GregorianCalendar objeto cuyo tiempo de los campos se han iniciado con
la fecha y hora actuales:
Calendar rightNow = Calendar.getInstance(); Calendario RightNow =
Calendar.getInstance ();

A Calendar object can produce all the time field values needed to implement the date-time
formatting for a particular language and calendar style (for example, Japanese-Gregorian,
Japanese-Traditional). Un Calendar objeto puede producir todo el campo de valores de tiempo
necesarios para implementar el tiempo el formato de fechas para un idioma en particular y el
estilo del calendario (por ejemplo, japons gregoriano, japons tradicional).
When computing a Date from time fields, two special circumstances may arise: there may be
insufficient information to compute the Date (such as only year and month but no day in the
month), or there may be inconsistent information (such as "Tuesday, July 15, 1996" -- July 15,
1996 is actually a Monday). Al calcular la Date de los campos de tiempo, dos circunstancias
especiales que puedan surgir: puede haber suficiente informacin para calcular la Date (por
ejemplo, slo ao y mes, pero no hay da en el mes), o puede haber informacin contradictoria
(por ejemplo, "martes, 15 de julio 1996 "- 15 de julio de 1996 es en realidad un lunes).
Insufficient information. The calendar will use default information to specify the missing
fields. La falta de informacin. El calendario se utiliza la informacin predeterminada para
especificar los campos que faltan. This may vary by calendar; for the Gregorian calendar, the
default for a field is the same as that of the start of the epoch: ie, YEAR = 1970, MONTH =
JANUARY, DATE = 1, etc. Esto puede variar segn el calendario, pues el calendario
gregoriano, el valor predeterminado para un campo es el mismo que el del inicio de la poca: es
decir, AO = 1970 = MES DE ENERO DE FECHA = 1, etc
Inconsistent information. If fields conflict, the calendar will give preference to fields set more
recently. informacin incoherente. Si el conflicto campos, el calendario se dar preferencia a
los campos de conjunto ms recientemente. For example, when determining the day, the calendar
will look for one of the following combinations of fields. Por ejemplo, la hora de determinar el
da, el calendario se busque una de las siguientes combinaciones de campos. The most recent
combination, as determined by the most recently set single field, will be used. La combinacin
ms recientes, segn lo determinado por el campo de la ms reciente conjunto nico y se
utilizar.
MONTH + DAY_OF_MONTH MES + DAY_OF_MONTH
MONTH + WEEK_OF_MONTH + DAY_OF_WEEK MES + + WEEK_OF_MONTH DAY_OF_WEEK
MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK MES + + DAY_OF_WEEK_IN_MONTH
DAY_OF_WEEK
DAY_OF_YEAR DAY_OF_YEAR
DAY_OF_WEEK + WEEK_OF_YEAR DAY_OF_WEEK + WEEK_OF_YEAR

For the time of day: Para la hora del da:
HOUR_OF_DAY HOUR_OF_DAY
AM_PM + HOUR Am_pm + HORA

Note: for some non-Gregorian calendars, different fields may be necessary for complete
disambiguation. Nota: para algunos-los calendarios gregoriano no, los diferentes campos que
sean necesarias para la desambiguacin completa. For example, a full specification of the
historial Arabic astronomical calendar requires year, month, day-of-month and day-of-week in
some cases. Por ejemplo, una especificacin completa del historial astronmicos del calendario
rabe exige ao, mes, da de mes y da de la semana en algunos casos.
Note: There are certain possible ambiguities in interpretation of certain singular times, which are
resolved in the following ways: Nota: Hay algunos posibles ambigedades en la interpretacin
de ciertos momentos singulares, que se resuelven de la siguiente manera:
1. 24:00:00 "belongs" to the following day. 24:00:00 "pertenece" al da siguiente. That is, 23:59 on
Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970 Es decir, las 23:59 del 31 de
diciembre 1969 <24:00 horas de 01 de enero 1970 <24:01:00 el 01 de enero 1970
2. Although historically not precise, midnight also belongs to "am", and noon belongs to "pm", so
on the same day, 12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm Aunque
histricamente no se precisa, tambin pertenece a la medianoche "soy", y el medioda es de
"pm", por lo que el mismo da, a las 12:00 am (medianoche) <12:01 am y 12:00 pm (medioda)
<12 : 13:00
The date or time format strings are not part of the definition of a calendar, as those must be
modifiable or overridable by the user at runtime. Las cadenas de formato de fecha o la hora no
son parte de la definicin de un calendario, como los que deben ser modificable o reemplazable
por el usuario en tiempo de ejecucin. Use DateFormat to format dates. Utilice DateFormat a
las fechas en formato.
Calendar provides an API for field "rolling", where fields can be incremented or decremented,
but wrap around. Calendar proporciona una API para el campo "mvil", donde los campos se
puede aumentar o disminuir, pero envolver. For example, rolling the month up in the date
December 12, 1996 results in January 12, 1996 . Por ejemplo, rodar en el mes de la fecha
December 12, 1996 los resultados en January 12, 1996 .
Calendar also provides a date arithmetic function for adding the specified (signed) amount of
time to a particular time field. Calendar tambin proporciona una funcin aritmtica de fechas
para agregar el especificado (firmado) la cantidad de tiempo a un campo de tiempo en particular.
For example, subtracting 5 days from the date September 12, 1996 results in September 7,
1996 . Por ejemplo, restando 5 das a partir de la fecha September 12, 1996 los resultados en
September 7, 1996 .
See Also: Vea tambin:
Date , GregorianCalendar , TimeZone , DateFormat , Serialized Form Date ,
GregorianCalendar , TimeZone , DateFormat , serializados Formulario

Field Summary Resumen de campo
static
int
AM
Value of the AM_PM field indicating the period of the day from midnight to just before
noon. Valor de la AM_PM campo que indica el perodo del da desde la medianoche hasta
poco antes del medioda.
static
int
AM_PM
Field number for get and set indicating whether the HOUR is before or after noon.
Nmero de campo para get y set que indica si el HOUR es antes o despus del medioda.
static
int
APRIL
Value of the MONTH field indicating the fourth month of the year. Valor de la MONTH campo
que indica el cuarto mes del ao.
protected
boolean
areFieldsSet
True if fields[] are in sync with the currently set time. Verdadero si fields[] estn en
sincrona con el tiempo establecido en la actualidad.
static
int
AUGUST
Value of the MONTH field indicating the eighth month of the year. Valor de la MONTH campo
que indica el octavo mes del ao.
static
int
DATE
Field number for get and set indicating the day of the month. Nmero de campo para
get y set que indica el da del mes.
static
int
DAY_OF_MONTH
Field number for get and set indicating the day of the month. Nmero de campo para
get y set que indica el da del mes.
static
int
DAY_OF_WEEK
Field number for get and set indicating the day of the week. Nmero de campo para get
y set que indica el da de la semana.
static
int
DAY_OF_WEEK_IN_MONTH
Field number for get and set indicating the ordinal number of the day of the week within
the current month. Nmero de campo para get y set que indica el nmero ordinal del da
de la semana dentro del mes en curso.
static
int
DAY_OF_YEAR
Field number for get and set indicating the day number within the current year. Nmero
de campo para get y set que indica el nmero del da dentro del ao en curso.
static
int
DECEMBER
Value of the MONTH field indicating the twelfth month of the year. Valor de la MONTH
campo que indica el duodcimo mes del ao.
static
int
DST_OFFSET
Field number for get and set indicating the daylight savings offset in milliseconds.
Nmero de campo para get y set que indica el horario de verano desplazamiento en
milisegundos.
static
int
ERA
Field number for get and set indicating the era, eg, AD or BC in the Julian calendar.
Nmero de campo para get y set que indica la poca, por ejemplo, AD o BC en el
calendario juliano.
static
int
FEBRUARY
Value of the MONTH field indicating the second month of the year. Valor de la MONTH
campo que indica el segundo mes del ao.
static
int
FIELD_COUNT
The number of distict fields recognized by get and set . El nmero de campos distict
reconocidos por get y set .
protected
int[]
fields
The field values for the currently set time for this calendar. El campo de los valores para el
tiempo fijado actualmente para este calendario.
static
int
FRIDAY
Value of the DAY_OF_WEEK field indicating Friday. Valor de la DAY_OF_WEEK campo que
indica el viernes.
static
int
HOUR
Field number for get and set indicating the hour of the morning or afternoon. Nmero de
campo para get y set que indica la hora de la maana o la tarde.
static
int
HOUR_OF_DAY
Field number for get and set indicating the hour of the day. Nmero de campo para get
y set que indica la hora del da.
protected
boolean[]
isSet
The flags which tell if a specified time field for the calendar is set. Las banderas que indican
si un campo de tiempo especificado para el calendario se establece.
protected
boolean
isTimeSet
True if then the value of time is valid. True si el valor de time es vlido.
static
int
JANUARY
Value of the MONTH field indicating the first month of the year. Valor de la MONTH campo
que indica el primer mes del ao.
static
int
JULY
Value of the MONTH field indicating the seventh month of the year. Valor de la MONTH
campo que indica el sptimo mes del ao.
static
int
JUNE
Value of the MONTH field indicating the sixth month of the year. Valor de la MONTH campo
que indica el sexto mes del ao.
static
int
MARCH
Value of the MONTH field indicating the third month of the year. Valor de la MONTH campo
que indica el tercer mes del ao.
static
int
MAY
Value of the MONTH field indicating the fifth month of the year. Valor de la MONTH campo
que indica el quinto mes del ao.
static
int
MILLISECOND
Field number for get and set indicating the millisecond within the second. Nmero de
campo para get y set que indica el milisegundo en el segundo.
static
int
MINUTE
Field number for get and set indicating the minute within the hour. Nmero de campo
para get y set que indica los minutos en una hora.
static
int
MONDAY
Value of the DAY_OF_WEEK field indicating Monday. Valor de la DAY_OF_WEEK campo que
indica el lunes.
static
int
MONTH
Field number for get and set indicating the month. Nmero de campo para get y set
indicando el mes.
static
int
NOVEMBER
Value of the MONTH field indicating the eleventh month of the year. Valor de la MONTH
campo que indica el undcimo mes del ao.
static
int
OCTOBER
Value of the MONTH field indicating the tenth month of the year. Valor de la MONTH campo
que indica el dcimo mes del ao.
static
int
PM
Value of the AM_PM field indicating the period of the day from noon to just before
midnight. Valor de la AM_PM campo que indica el perodo del da desde el medioda hasta
poco antes de medianoche.
static
int
SATURDAY
Value of the DAY_OF_WEEK field indicating Saturday. Valor de la DAY_OF_WEEK campo que
indica sbado.
static
int
SECOND
Field number for get and set indicating the second within the minute. Nmero de campo
para get y set que indica el segundo en el minuto.
static
int
SEPTEMBER
Value of the MONTH field indicating the ninth month of the year. Valor de la MONTH campo
que indica el noveno mes del ao.
static
int
SUNDAY
Value of the DAY_OF_WEEK field indicating Sunday. Valor de la DAY_OF_WEEK campo que
indica el domingo.
static
int
THURSDAY
Value of the DAY_OF_WEEK field indicating Thursday. Valor de la DAY_OF_WEEK campo
que indica el jueves.
protected
long
time
The currently set time for this calendar, expressed in milliseconds after January 1, 1970,
0:00:00 GMT. El tiempo fijado actualmente para este calendario, expresado en
milisegundos despus de enero 1, 1970, 0:00:00 GMT.
static
int
TUESDAY
Value of the DAY_OF_WEEK field indicating Tuesday. Valor de la DAY_OF_WEEK campo que
indica el martes.
static
int
UNDECIMBER
Value of the MONTH field indicating the thirteenth month of the year. Valor de la MONTH
campo que indica el dcimo tercer mes del ao.
static
int
WEDNESDAY
Value of the DAY_OF_WEEK field indicating Wednesday. Valor de la DAY_OF_WEEK campo
que indica el mircoles.
static
int
WEEK_OF_MONTH
Field number for get and set indicating the week number within the current month.
Nmero de campo para get y set que indica el nmero de semana dentro del mes en
curso.
static
int
WEEK_OF_YEAR
Field number for get and set indicating the week number within the current year.
Nmero de campo para get y set que indica el nmero de semana dentro del ao en
curso.
static
int
YEAR
Field number for get and set indicating the year. Nmero de campo para get y set que
indican el ao.
static
int
ZONE_OFFSET
Field number for get and set indicating the raw offset from GMT in milliseconds. Nmero
de campo para get y set la prima que indica el desplazamiento de GMT en milisegundos.
Constructor Summary Constructor Resumen
protected Calendar ()
Constructs a Calendar with the default time zone and locale. Construye un calendario con
la zona horaria predeterminada y la configuracin regional.
protected Calendar ( TimeZone zone, Locale aLocale)
Constructs a calendar with the specified time zone and locale. Construye un calendario con
la zona horaria y la configuracin regional especificada.
Method Summary Resumen de mtodos
abstract
void
add (int field, int amount)
Date Arithmetic function. Fecha aritmtica funcin.
boolean after ( Object when)
Compares the time field records. Compara los registros de campo de tiempo.
boolean before ( Object when)
Compares the time field records. Compara los registros de campo de tiempo.
void clear ()
Clears the values of all the time fields. Borra los valores de todos los campos de hora.
void clear (int field)
Clears the value in the given time field. Borra el valor en el campo un momento dado.
Object clone ()
Overrides Cloneable Invalida Cloneable
protected
void
complete ()
Fills in any unset fields in the time field list. Rellena los campos desarmado en la lista de
campo de tiempo.
protected
abstract
void
computeFields ()
Converts the current millisecond time value time to field values in fields[] . Convierte
el valor del tiempo actual milisegundos time de los valores de campo en fields[] .
protected
abstract
void
computeTime ()
Converts the current field values in fields[] to the millisecond time value time .
Convierte los valores del campo actual en fields[] para el valor de milisegundos de
tiempo time .
boolean equals ( Object obj)
Compares this calendar to the specified object. Compara este calendario para el objeto
especificado.
int get (int field)
Gets the value for a given time field. Obtiene el valor de un campo de tiempo
determinado.
int getActualMaximum (int field)
Return the maximum value that this field could have, given the current date. Devuelve el
valor mximo que este campo podra tener, dada la fecha actual.
int getActualMinimum (int field)
Return the minimum value that this field could have, given the current date. Devuelve el
valor mnimo que este campo podra tener, dada la fecha actual.
static
Locale []
getAvailableLocales ()
Gets the list of locales for which Calendars are installed. Obtiene la lista de lugares para los
que se instalan calendarios.
int getFirstDayOfWeek ()
Gets what the first day of the week is; eg, Sunday in US, Monday in France. Obtiene lo que
el primer da de la semana es, por ejemplo, el domingo en EE.UU., el lunes en Francia.
abstract
int
getGreatestMinimum (int field)
Gets the highest minimum value for the given field if varies. Obtiene el alto valor mnimo
para el campo determinado, si vara.
static
Calendar
getInstance ()
Gets a calendar using the default time zone and locale. Obtiene un calendario con la zona
horaria predeterminada y la configuracin regional.
static
Calendar
getInstance ( Locale aLocale)
Gets a calendar using the default time zone and specified locale. Obtiene un calendario con
la zona horaria predeterminada y la configuracin regional especificada.
static
Calendar
getInstance ( TimeZone zone)
Gets a calendar using the specified time zone and default locale. Obtiene un calendario con
la zona horaria especificada y la configuracin regional predeterminada.
static
Calendar
getInstance ( TimeZone zone, Locale aLocale)
Gets a calendar with the specified time zone and locale. Obtiene un calendario con la zona
horaria y la configuracin regional especificada.
abstract
int
getLeastMaximum (int field)
Gets the lowest maximum value for the given field if varies. Obtiene el valor mximo ms
bajo para el campo dado si vara.
abstract
int
getMaximum (int field)
Gets the maximum value for the given time field. Obtiene el valor mximo para el campo
un momento dado.
int getMinimalDaysInFirstWeek ()
Gets what the minimal days required in the first week of the year are; eg, if the first week
is defined as one that contains the first day of the first month of a year,
getMinimalDaysInFirstWeek returns 1. Obtiene lo que los das mnimos requeridos en la
primera semana del ao son, por ejemplo, si la primera semana se define como uno que
contiene el primer da del primer mes de un ao, vuelve getMinimalDaysInFirstWeek 1.
abstract
int
getMinimum (int field)
Gets the minimum value for the given time field. Obtiene el valor mnimo para el campo un
momento dado.
Date getTime ()
Gets this Calendar's current time. Obtiene la hora actual de este calendario.
protected
long
getTimeInMillis ()
Gets this Calendar's current time as a long. Obtiene la hora actual de este calendario como
de largo.
TimeZone getTimeZone ()
Gets the time zone. Obtiene la zona horaria.
int hashCode ()
Returns a hash code for this calendar. Devuelve un cdigo hash para este calendario.
protected
int
internalGet (int field)
Gets the value for a given time field. Obtiene el valor de un campo de tiempo
determinado.
boolean isLenient ()
Tell whether date/time interpretation is to be lenient. Indica si la fecha y la interpretacin
del tiempo es ser indulgente.
boolean isSet (int field)
Determines if the given time field has a value set. Determina si el campo un momento
dado tiene un valor establecido.
abstract
void
roll (int field, boolean up)
Time Field Rolling function. Tiempo de campo del balanceo funcin.
void roll (int field, int amount)
Time Field Rolling function. Tiempo de campo del balanceo funcin.
void set (int field, int value)
Sets the time field with the given value. Establece el campo tiempo con el valor dado.
void
set (int year, int month, int date)
Sets the values for the fields year, month, and date. Establece los valores para la campaa
de campos, mes y fecha.
void set (int year, int month, int date, int hour, int minute)
Sets the values for the fields year, month, date, hour, and minute. Establece los valores
para la campaa de campos, mes, fecha, hora y minuto.
void set (int year, int month, int date, int hour, int minute, int
second)
Sets the values for the fields year, month, date, hour, minute, and second. Establece los
valores para la campaa de campos, mes, fecha, hora, minuto y segundo.
void setFirstDayOfWeek (int value)
Sets what the first day of the week is; eg, Sunday in US, Monday in France. Establece lo que
el primer da de la semana es, por ejemplo, el domingo en EE.UU., el lunes en Francia.
void setLenient (boolean lenient)
Specify whether or not date/time interpretation is to be lenient. Especifique si la fecha y la
interpretacin del tiempo es ser indulgente.
void setMinimalDaysInFirstWeek (int value)
Sets what the minimal days required in the first week of the year are; For example, if the
first week is defined as one that contains the first day of the first month of a year, call the
method with value 1. Establece que los das mnimos requeridos en la primera semana del
ao son: Por ejemplo, si la primera semana se define como uno que contiene el primer da
del primer mes de un ao, llame al mtodo con el valor 1.
void setTime ( Date date)
Sets this Calendar's current time with the given Date. Establece la hora actual de este
calendario con la fecha dada.
protected
void
setTimeInMillis (long millis)
Sets this Calendar's current time from the given long value. Establece la hora actual de este
calendario desde el valor dado de largo.
void setTimeZone ( TimeZone value)
Sets the time zone with the given time zone value. Establece la zona horaria con el valor de
zona horaria determinada.
String toString ()
Return a string representation of this calendar. Devuelve una representacin de cadena de
este calendario.

También podría gustarte