Seguinte, eu tenho essa classe abaixo que faz o calculo de horas trabalhadas. Estou com dois problemas o primeiro é como fazer para que quando o usuário digite que entrou no serviço as 20:00 e saiu as 03:00 da manhã do outro dia o sistema entenda que são 4 horas de um dia e mais 3 horas de outro dia ?? E a outra pergunta eh a seguinte qndo faço o calculo das horas totais sempre que acumula 24 horas o sistema zera o contador como se fosse outro dia. Eu queria saber como lidar com a hora sem ter o limite de 24 horas. Tem como ?? Abração, obrigado pela atenção…
/*
- Calcula.java
- Created on 12 de Setembro de 2006, 12:10
*/
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
*
-
@author Fernando Bracher Beilke
*/
public class Calcula
{
public static void horas(int linha, javax.swing.JTable TabelaHoras) {
String diaSemana = TabelaHoras.getValueAt(linha,1).toString();
String horaInicial = TabelaHoras.getValueAt(linha,2).toString();
String horaFinal = TabelaHoras.getValueAt(linha,3).toString();
String almoco = “01:00”;
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long minEntrada = getMinutos(horaInicial, formatter);
long minSaida = getMinutos(horaFinal, formatter);
if (diaSemana == "Segunda" || diaSemana == "Terça-feira" || diaSemana == "Quarta-feira"
|| diaSemana == "Quinta-feira" || diaSemana == "Sexta-feira" || !diaSemana.equals("")) {
if (minSaida <= 1050) {
String horasNormais = subtraiHora(horaInicial,horaFinal,almoco).toString();
TabelaHoras.setValueAt(almoco,linha,4); // Almoço
TabelaHoras.setValueAt(horasNormais,linha,5); // Horas Normais
TabelaHoras.setValueAt("00:00",linha,6); // Horas Extras 50%
TabelaHoras.setValueAt("00:00",linha,7); // Horas Extras 100%
}
if (minSaida > 1050 && minEntrada < 1050) {
String horasNormais = subtraiHora(horaInicial,"17:30",almoco).toString();
String horasExtras50 = subtraiHora("17:30",horaFinal,"00:00").toString();
TabelaHoras.setValueAt(almoco,linha,4); // Almoço
TabelaHoras.setValueAt(horasNormais,linha,5); // Horas Normais
TabelaHoras.setValueAt(horasExtras50,linha,6); // Horas Extras 50%
TabelaHoras.setValueAt("00:00",linha,7); // Horas Extras 100%
}
else if (minSaida > 1050 && minEntrada > 1050) {
String horasExtras50 = subtraiHora(horaInicial,horaFinal,"00:00").toString();
TabelaHoras.setValueAt("00:00",linha,5); // Horas Normais
TabelaHoras.setValueAt(horasExtras50,linha,6); // Horas Extras 50%
TabelaHoras.setValueAt("00:00",linha,7); // Horas Extras 100%
}
}
if (diaSemana == "Sábado") { // Herda a variavel diaSemana da Classe Utildata
String horasExtras50 = subtraiHora(horaInicial,horaFinal,almoco).toString();
TabelaHoras.setValueAt(almoco,linha,4); // Almoço
TabelaHoras.setValueAt("00:00",linha,5); // Horas Normais
TabelaHoras.setValueAt(horasExtras50,linha,6); // Horas Extras 50%
TabelaHoras.setValueAt("00:00",linha,7); // Horas Extras 100%
}
if (diaSemana == "Domingo") { // Herda a variavel diaSemana da Classe Utildata
String horasExtras100 = subtraiHora(horaInicial,horaFinal,almoco).toString();
TabelaHoras.setValueAt(almoco,linha,4); // Almoço
TabelaHoras.setValueAt("00:00",linha,5); // Horas Normais
TabelaHoras.setValueAt("00:00",linha,6); // Horas Extras 50%
TabelaHoras.setValueAt(horasExtras100,linha,7); // Horas Extras 100%
}
}
/* Método utilizado para calcular as apurações em tempo real */
public static void Apuracoes(javax.swing.JTable TabelaHoras, javax.swing.JTextField KmApurado,
javax.swing.JTextField NormalApurado, javax.swing.JTextField Extra50Apurado,
javax.swing.JTextField Extra100Apurado) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
int somaKM = 0;
String somaHsNormais = "00:00";
String somaHsExtra50 = "00:00";
String somaHsExtra100 = "00:00";
for (int ln = 0;ln < TabelaHoras.getRowCount()-1;ln++) {
if (!TabelaHoras.getValueAt(ln,8).toString().equals("")) {
int KM = Integer.parseInt(TabelaHoras.getValueAt(ln,8).toString());
somaKM += KM;
KmApurado.setText(String.valueOf(somaKM));
}
}
for (int ln = 0;ln < TabelaHoras.getRowCount()-1;ln++) {
if (!TabelaHoras.getValueAt(ln,5).toString().equals("")) {
String HsNormal = TabelaHoras.getValueAt(ln,5).toString();
somaHsNormais = somaHora(somaHsNormais,HsNormal);
NormalApurado.setText(String.valueOf(somaHsNormais));
}
}
for (int ln = 0;ln < TabelaHoras.getRowCount()-1;ln++) {
if (!TabelaHoras.getValueAt(ln,6).toString().equals("")) {
String HsExtra50 = TabelaHoras.getValueAt(ln,6).toString();
somaHsExtra50 = somaHora(somaHsExtra50,HsExtra50);
Extra50Apurado.setText(String.valueOf(somaHsExtra50));
}
}
for (int ln = 0;ln < TabelaHoras.getRowCount()-1;ln++) {
if (!TabelaHoras.getValueAt(ln,7).toString().equals("")) {
String HsExtra100 = TabelaHoras.getValueAt(ln,7).toString();
somaHsExtra100 = somaHora(somaHsExtra100,HsExtra100);
Extra100Apurado.setText(String.valueOf(somaHsExtra100));
}
}
}
/* Métodos utilizados para Cálculo de horas */
public static String subtraiHora(String horaInicial, String horaFinal, String Almoco) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long minInicial = getMinutos(horaInicial, formatter);
long minFinal = getMinutos(horaFinal, formatter);
long minAlmoco = getMinutos(Almoco, formatter);
long result = (minFinal - minInicial - minAlmoco) * 60 * 1000;
Date data = new Date(result);
return formatter.format(data);
}
private static String somaHora(String horaInicial, String horaFinal) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long minInicial = getMinutos(horaInicial, formatter);
System.out.println(minInicial);
long minFinal = getMinutos(horaFinal, formatter);
System.out.println(minFinal);
long result = (minFinal + minInicial) * 60 * 1000;
System.out.println(result);
Date data = new Date(result);
System.out.println(data);
//return Float.toString(result);
System.out.println(formatter.format(data));
return formatter.format(data);
}
public static String multiplicaHora(String qtdadeHoras, String valorHora) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
long minutos = getMinutos(qtdadeHoras, formatter);
int valorHoras = Integer.parseInt(valorHora);
long result = (minutos * valorHoras) / 60;
return Long.toString(result);
}
private static long getMinutos(String hora, SimpleDateFormat formatter) {
Date data;
try {
data = formatter.parse(hora);
} catch (Exception e) {
return 0;
}
long minutos = data.getTime() / 1000 / 60;
return minutos;
}
//public long getTime() { }
private final static TimeZone GMT = TimeZone.getTimeZone("GMT");