i
Cálculo de Tiempos
En los tópicos anteriores pertenecientes al "Procesamiento de Alertas" hemos indicado dos tipos diferentes de cálculos:
•Cálculo de Tiempos - Segundos por Periodo.
En este punto se explica el mecanismo que utiliza el sistema para calcular la cantidad de segundos que conforman un periodo de tiempo, que está expresado como una Cantidad de Días (DD), Horas (HH), Minutos (MM) y Segundos (SS).
Existen dos situaciones diferentes:
a)Considerando Tiempo Lineal o Calendario
SegundosPorPeriodo = DD * 86400 + HH * 3600 + MM * 60 + SS
b)Considerando Tiempo Laboral
Cuando se trabaja con tiempo laboral, la diferencia es que la duración de la jornada laboral queda establecida en el calendario laboral que utilice el participante responsable de la actividad.
En el calendario de define la duración del Día Laboral, mediante los atributos Cantidad de Horas y Cantidad de Minutos.
Entonces, tendremos que la cantidad de segundos por jornada laboral será:
SegundosPorDia = Cantidad de Horas * 3600 + Cantidad de Minutos * 60
Luego:
SegundosPorPeriodo = SegundosPorDia * DD + HH * 3600 + MM * 60 + SS
•Cálculo de Tiempos – Fecha + Cantidad de Segundos
En este punto se explica el mecanismo que utiliza el sistema para calcular una fecha, que surge como sumatoria de una fecha dada mas una cierta cantidad de segundos.
Nueva Fecha = Fecha + Cantidad de Segundos.
Existen dos situaciones diferentes:
a)Considerando Tiempo Lineal o Calendario
En estos casos no existen complejidades. Se utilizan los tipos nativos del lenguaje Java para realizar la suma y se retorna el valor resultante.
b)Considerando Tiempo Laboral
Cuando se trabaja con tiempo laboral, la idea es que la cantidad de segundos que se suman sean laborables. Para determinar si son laborables, se utiliza la definición de “Calendarios”, “Fechas Particulares” y “Días Feriados”. En particular, se usa el calendario del participante responsable de la actividad.
Un calendario laboral establece diferentes periodos laborables:
Día lunes |
Día Martes
|
Día Miércoles |
Día Jueves |
||||||||||||||||
|
L1 |
|
L2 |
|
|
L3 |
|
L4 |
|
|
L5 |
|
L6 |
|
|
L7 |
|
L8 |
|
El esquema representa a un calendario que define, para cada día de la semana, franjas u horarios laborables L1, L2,…..L8.
Cada una de las franjas laborables, está perfectamente definida por el calendario, y tiene una fecha y hora de inicio y una fecha y hora de fin. Para cada una de ellas, se conocen claramente los segundos laborables que la conforman.
La definición de "Días Feriados" hace que no sean considerados como laborables.
La definición de "Fechas Particulares" tiene precedencia sobre el "Calendario" del usuario y también sobre la definición de "Días Feriados", y permiten redefinir los horarios laborales de un día particular.
Ejemplos:
Para simplificar, supongamos que cada día tiene 2 franjas laborables de 4 horas. Por la mañana se trabaja de 8:00 a 12:00 y por la tarde de 14:00 a 18:00.
Entonces cada franja horaria tiene (4 x 60 x 60) = 14.400 Segundos.
Supongamos también que el día miércoles es un día particular, porque solamente se trabaja en la mañana.
Ejemplo 1
•FECHA = Lunes 7:00
•SEGUNDOS = 3600 (1 hora)
•NUEVA FECHA = Lunes 09:00
Día lunes |
Día Martes
|
Día Miércoles |
Día Jueves |
||||||||||||||||
|
L1 |
|
L2 |
|
|
L3 |
|
L4 |
|
|
L5 |
|
L6 |
|
|
L7 |
|
L8 |
|
FECHA NUEVA FECHA Lunes, 07:00 Lunes 09:00 |
Ejemplo 2
•FECHA = Lunes 7:00
•SEGUNDOS = 18.000 (05 Horas)
•NUEVA FECHA = Lunes 15:00
Día lunes |
Día Martes
|
Día Miércoles |
Día Jueves |
||||||||||||||||
|
L1 |
|
L2 |
|
|
L3 |
|
L4 |
|
|
L5 |
|
L6 |
|
|
L7 |
|
L8 |
|
FECHA NUEVA FECHA Lunes, 07:00 Lunes 15:00 |
Ejemplo 3
•FECHA = Lunes 7:00
•SEGUNDOS = 36.000 (10 Horas)
•Nueva Fecha = Martes 11:00
Día lunes |
Día Martes
|
Día Miércoles |
Día Jueves |
||||||||||||||||
|
L1 |
|
L2 |
|
|
L3 |
|
L4 |
|
|
L5 |
|
L6 |
|
|
L7 |
|
L8 |
|
FECHA NUEVA FECHA Lunes, 07:00 Martes 11:00 |
Ejemplo 4
•FECHA = Martes 17:00
•SEGUNDOS = 21.600 (06 Horas)
•Nueva Fecha = Jueves 09:00
Día lunes |
Día Martes
|
Día Miércoles |
Día Jueves |
||||||||||||||||
|
L1 |
|
L2 |
|
|
L3 |
|
L4 |
|
|
L5 |
|
L6 |
|
|
L7 |
|
L8 |
|
FECHA NUEVA FECHA Martes 17:00 Jueves 09:00 |
Aquí tenemos que el día miércoles en la tarde no es laborable.
Entonces, de las 6 horas, se utilizan 1 hora del día martes, 4 horas del miércoles y queda 1 hora para el jueves.
Observación:
Los cálculos de tiempo, cuando se trabaja con tiempo laboral, se realizan siempre considerando el calendario laboral del participante que está ejecutando la actividad.
No obstante, el valor resultante del cálculo, que corresponderá a una fecha-hora, siempre se almacena en base respetando la zona horaria del servidor (Calendario 01).
Luego, cuando este valor deba ser usado nuevamente, ya sea para realizar otro cálculo o para mostrado a un usuario, se lo transforma según la diferencia horaria que corresponda al calendario usado por dicho usuario.
Es decir, para manejo de campos fecha–hora , se realiza lo siguiente:
•Se lee CAMPO desde la base de datos. (Se asume que está en TimeZone del Calendario 01).
•Se expresa en el time-zone del usuario responsable. (Calendario N).
•Se visualiza el valor o se realiza cálculo con ese valor.
•Si corresponde actualizar en la base:
oSe convierte a Time Zone del Calendario 01
oSe almacena CAMPO en Base