O código abaixo a gente calcula as horas e os minutos do seu horário de trabalho do dia:
if(!txtSaidaManha.getText().isEmpty() && !txtEntradaManha.getText().isEmpty()){
inicio = sdf1.parse(txtSaidaManha.getText());
fim = sdf1.parse(txtEntradaManha.getText());
entradamanha = new DateTime(fim);
saidamanha = new DateTime(inicio);
horasmanha = Hours.hoursBetween(entradamanha, saidamanha).getHours();
horasmanha = horasmanha % 24;
minutosmanha = Minutes.minutesBetween(entradamanha, saidamanha).getMinutes();
minutosmanha = minutosmanha % 60;
}
if(!txtSaidaTarde.getText().isEmpty() && !txtEntradaTarde.getText().isEmpty()){
inicio = sdf1.parse(txtSaidaTarde.getText());
fim = sdf1.parse(txtEntradaTarde.getText());
saidatarde = new DateTime(inicio);
entradatarde = new DateTime(fim);
horastarde = Hours.hoursBetween(entradatarde, saidatarde).getHours();
horastarde = horastarde % 24;
minutostarde = Minutes.minutesBetween(entradatarde, saidatarde).getMinutes();
minutostarde = minutostarde % 60;
}
if(!txtSaidaNoite.getText().isEmpty() && !txtEntradaNoite.getText().isEmpty()){
inicio = sdf1.parse(txtSaidaTarde.getText());
fim = sdf1.parse(txtEntradaTarde.getText());
saidanoite = new DateTime(inicio);
entradanoite = new DateTime(fim);
horasnoite = Hours.hoursBetween(entradanoite, saidanoite).getHours();
horasnoite = horasnoite % 24;
minutosnoite = Minutes.minutesBetween(entradanoite, saidanoite).getMinutes();
minutosnoite = minutosnoite % 60;
}
horastotal = horasmanha + horasnoite + horastarde;
minutostotal = minutosmanha + minutosnoite + minutostarde;
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(sdf.parse(txtDia.getText()));
new FichaPontoDAO().atualizarHorario(ficha.getIdcolaborador().getId(), cal, horastotal, minutostotal);
No método abaixo está o método atualizarHorario que verifica que o colaborador trabalhou a mais ou menos de acordo com a carga horária dele:
public void atualizarHorario(int idcolaborador, GregorianCalendar data, int horas, int minutos){
EntityManager manager = getEntityManager();
int diadasemana, hora=0, min=0;
Date cargahoraria = null, dt1;
long horafalta, horaextra, result;
DateTime dt;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
GregorianCalendar cal = new GregorianCalendar();
Calendar cl = Calendar.getInstance();
cl.set(cl.HOUR_OF_DAY, horas);
cl.set(cl.MINUTE, minutos);
cl.set(cl.SECOND, 0);
cl.set(cl.MILLISECOND, 0);
cl.set(cl.YEAR, data.YEAR);
cl.set(cl.MONTH, data.MONTH);
cl.set(cl.DAY_OF_YEAR, data.DAY_OF_YEAR);
dt1 = cl.getTime();
diadasemana = data.get(Calendar.DAY_OF_WEEK);
if(diadasemana==1){
Query consulta = manager.createQuery("select cargahorariadomingo from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else if(diadasemana==2){
Query consulta = manager.createQuery("select cargahorariasegunda from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else if(diadasemana==3){
Query consulta = manager.createQuery("select cargahorariaterca from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else if(diadasemana==4){
Query consulta = manager.createQuery("select cargahorariaquarta from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else if(diadasemana==5){
Query consulta = manager.createQuery("select cargahorariaquinta from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else if(diadasemana==6){
Query consulta = manager.createQuery("select cargahorariasexta from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}else{
Query consulta = manager.createQuery("select cargahorariasabado from Escala");
cargahoraria = (Date) consulta.getSingleResult();
}
DateTime carga = new DateTime(cargahoraria);
dt = new DateTime(dt1);
hora = Hours.hoursBetween(carga, dt).getHours()%24;
min = Minutes.minutesBetween(carga, dt).getMinutes()%60;
}
Só se o colaborador trabalha 07:00 horas em um dia com carga horária de 08:00 o resultado dessa linha:
hora = Hours.hoursBetween(carga, dt).getHours()%24;
não teria que ser -1? Só que está dando 23. Qual o motivo desse erro?