A finales del 2011 desarrolle un proyecto que tomaba la asistencia de personas en una oficina por medio de un dispositivo biometrico de huella digital. A la hora de generar los reportes de porcentaje de asistencia, calculaba un promedio de asistencia, si una persona solo asistía los viernes lo promediaba a 4 veces, pero el tiempo no es fácil de manejar, existe una anomalía, la cual es que ciertos meses una persona asiste 5 veces y en otras ocasiones 4. En febrero 2012 hay 4 viernes, y en Marzo 2012 hay 5 viernes.
Esto vuelve el sistema inexacto, así que procede por investigar como averiguar cuantos viernes tiene un determinado mes, la lógica me dicto, saber la fecha del último viernes, y la del primer viernes, para poder encontrar la fórmula.
Calcular el último viernes.
- Calendar pCal=java.util.GregorianCalendar.getInstance();
- pCal.set(GregorianCalendar.YEAR,2012);
- pCal.set(GregorianCalendar.MONTH,GregorianCalendar.APRIL);
- pCal.set(GregorianCalendar.DAY_OF_WEEK,GregorianCalendar.FRIDAY);
- pCal.set(GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
- System.out.pritnln("Ultimo viernes: " + pCal.get(GregorianCalendar.DAY_OF_MONTH);
1. Se crea una una instancia de un calendario gregoriano
2. Se indica el año
3. Se indica el mes que se desea, GregorianCalendar presenta los meses en ingles
4. Se indica el día por medio de GregorianCalendar
5. Este es la que importa, el -1 indica el último viernes, no parece lógico a simple vista pero funciona.
6. Se imprime la instancia del calendario accediendo pCal.get indicando que deseamos el número de día en el mes indicado.
Calcular el primer viernes
Es similar a la anterior, solo cambia el parámetro del inciso 5
5. pCal.set(GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 1);
Se cambia a "1" lo que indica que se desea es el primer viernes
Y con esto sabemos la fecha del primer y ultimo viernes de un mes, para poder realizar cálculos con respecto al tiempo, esta solución me fue muy buena, debido que lo primero que vino a mi mente fue un cubo de Datawarehouse, pero no se tienen los recursos para esa solución.
Comentarios
Publicar un comentario