Beruflich Dokumente
Kultur Dokumente
JORGE CERVANTES
ÀNGEL CASADIEGOS
INGENIERIA DE SISTEMAS
2018
Tabla de contenido
Introducción……………………………………………………………………………..
Zonas horarias…………………………………………………………………………..
Comparar fechas………………………………………………………………………..
Fecha/Hora actual………………………………………………………………………
INTRODUCCION
today is
java.util.GregorianCalendar[time=1394883514531,areFields
Set=true,areAllFieldsSet=true,
lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/
Paris",
offset=3600000,dstSavings=3600000,useDaylight=true,trans
itions=184,
lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset
=3600000,dstSavings=3600000,
useDaylight=true,startYear=0,startMode=2,
startMonth=2,startDay=-
1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,end
Mode=2,
endMonth=9,endDay=-
1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDa
yOfWeek=2,
minimalDaysInFirstWeek=4,ERA=1,YEAR=2014,MONTH=2,WEEK_OF
_YEAR=11,WEEK_OF_MONTH=2,
DAY_OF_MONTH=15,DAY_OF_YEAR=74,DAY_OF_WEEK=7,DAY_OF_WEEK
_IN_MONTH=3,AM_PM=1,HOUR=0,
HOUR_OF_DAY=12,MINUTE=38,SECOND=34,MILLISECOND=531,ZONE_
OFFSET=3600000,DST_OFFSET=0]
El método getTime() devuelve el Calendar convertido a Date, que nos daría
una salida legible por pantalla al pasarlo a System.out.println(), ese es el
motivo por el que lo hemos usado
sameDate.set(Calendar.YEAR, 2010);
// Month. 0 is January, 11 is November
sameDate.set(Calendar.MONTH, Calendar.AUGUST);
sameDate.set(Calendar.DAY_OF_MONTH, 23);
sameDate.set(Calendar.MINUTE, 36);
sameDate.set(Calendar.SECOND, 22);
sameDate.set(Calendar.MILLISECOND, 123);
Calendar define constantes para todos los nombres de los posibles campos
y son estas constantes las que pasamos como primer parámetro. Adviértase
que para el mes nuevamente hemos usado las constantes definidas
como Calendar.AUGUST, en vez de directamente un número de mes ( 7
para Agosto ), que puede llevar a confusión.
Aparte de los campos evidentes, vemos por ejemplo que la hora se puede
fijar de dos formas:
System.out.println("Year : " +
today.get(Calendar.YEAR));
System.out
.println("Day of Week (String): "
+ today.getDisplayName(Calendar.DAY_OF_WEEK,
Calendar.LONG,
locale));
System.out
.println("Week of Month : " +
today.get(Calendar.WEEK_OF_MONTH));
System.out.println("AM/PM : " +
today.get(Calendar.AM_PM));
System.out.println("AM/PM : "
+ today.getDisplayName(Calendar.AM_PM,
Calendar.LONG, locale));
System.out.println("Minutes : " +
today.get(Calendar.MINUTE));
System.out.println("Seconds : " +
today.get(Calendar.SECOND));System.out.println("MiliSeco
nds : " + today.get(Calendar.MILLISECOND));
Hay campos que no requieren explicación detallada, como año, día del mes,
minuto, etc. Pero para otros conviene explicar un poco más.
Por ejemplo, el día de la semana, el mes o si es am/pm nos devuelven un
número entero que quizás no nos guste demasiado. El 0 corresponde a
Domingo y el 6 a Sábado, el 0 corresponde a Enero y el 11 a Diciembre, el
0 corresponde a am y el 1 a pm. Para obtener un texto más legible y no
decirle al usuario, por ejemplo, que está en el mes 0, Calendar tiene un
método getDisplayName() que nos devuelve un texto legible para mes, día
de la semana o AM/PM. Este método admite tres parámetros
El campo (año, mes, día, hora, minuto, segundo), identificado por una de
las constantes ya conocidas, al que queremos sumar o resta un valor
Valor a sumar o restar. Si el valor es positivo, se suma, si el valor es
negativo, se resta.
Veamos un poco de código sencillo que no requiere explicación
today = Calendar.getInstance();
today.add(Calendar.DAY_OF_MONTH, -
20);System.out.println("Today minus 20 days : " +
today.getTime());
Comparar fechas
Calendar permite comparar fechas, indicándonos si una es anterior o
posterior a otra. Los métodos son before() y after() para saber si nuestra
fecha es anterior o posterior a otra que nos pasen. Adicionalmente, el
método compareTo() devuelve un número negativo, cero o positivo según
nuestra fecha sea anterior, igual o posterior a la que nos pasen.
El método compareTo() es útil para ordenar Calendar que estén en un array
por medio de clases como Arrays.sort(). Para nuestro código, posiblemente
nos sea más fácil usar los métodos after() y before().
Veamos un trozo de código sencillo
Zonas horarias
A la hora de instanciar un Calendar, podemos pasar una zona
horaria TimeZone. Esto nos permite obtener la hora en los distintos sitios
del mundo. Por ejemplo, mi TimeZone por defecto es España, para
comparar con la hora en Canadá podemos hacer el siguiente código
Calendar spanishToday =
Calendar.getInstance(TimeZone.getDefault());
Calendar canadianToday =
Calendar.getInstance(TimeZone.getTimeZone("Canada/Centra
l"));
System.out.println("Spanish hour
"+spanishToday.get(Calendar.HOUR_OF_DAY));
System.out.println("Canadian hour
"+canadianToday.get(Calendar.HOUR_OF_DAY));
Spanish hour 13
Canadian hour 7
// Available TimeZones
String [] timeZones = TimeZone.getAvailableIDs();
System.out.println("Available Timezones
"+Arrays.toString(timeZones));
Calendar aToday=
Calendar.getInstance(TimeZone.getTimeZone("GMT+8:00"));
Calendar anotherToday=
Calendar.getInstance(TimeZone.getTimeZone("GMT-4:00"));
Ejercicios propuestos
Sabiendo esto, impleméntese una clase Fecha cuyos objetos tengan tres
variables de estado privadas: día, mes y año con valores enteros
correspondientes a los datos de una fecha correcta. Esta clase deberá tener
al menos:
• Un constructor con tres argumentos de tipo int: día, mes y año,
respectivamente, que deberá comprobar si dichos datos corresponden a
una fecha correcta antes de aceptarlos; en caso contrario deberá lanzar una
excepción del tipo RuntimeException .
• Un método público de clase, esBisiesto(int a), para saber si un año a es
bisiesto o no (dentro del periodo de vigencia del calendario gregoriano).
• Un método público de clase númeroDeDías(int a) que devuelva el número
de días de un año y númeroDeDías(int m, int a) que devuelva el número de
días del mes m en el año a.
• Tres métodos públicos para poder consultar el día, el mes y el año de una
fecha.
• Un método público para poder calcular los días transcurridos del año hasta
la fecha, díasTranscurridosDelAño() y otro para calcular los días que
quedan desde la fecha, díasRestantesDelAño() .
• Un método público diferenciaDeDíasCon(Fecha f) para calcular la
diferencia de días (positiva o negativa) entre la fecha f y la fecha actual.
• Métodos para pasar al día siguiente, díaSiguiente(), al día anterior,
díaAnterior(), y para trasladar una fecha un número entero (positivo o
negativo) de días, trasladar(int ndías).
Se deberán redefinir adecuadamente los métodos: equals(Object obj),
hashCode() y toString().
La clase Fecha también deberá implementar las interfaces Cloneable, y
redefinir el método clone(), y Comparable, para poder comparar fechas,
definiendo el método public int compareTo(Object obj), que devolverá -1, 0 ó
1 según que la fecha actual sea anterior, igual o posterior a la fecha
referenciada por el objeto obj.
Bibliografía
Lugares de consulta
https://www.discoduroderoer.es/clase-calendar-en-java/
http://carloszuluaga.wikidot.com/articulos:manejo-de-fechas-en-java-ii
http://ocw.uc3m.es/historico/programacion-java/manuales/java2-U-
Navarra.pdf
Ejercicios Propuestos
http://www.lcc.uma.es/~jmmb/lto/Practica2.pdf