Olá, tudo bem ?
sou nova na área e o GUJ foi o site mais indicado pra pesquisas e dúvidas…
realmente eu gostei muito e decidi criar uma conta pra minhas possíveis dúvidas, rs.
e ai vem uma.
Eu tenho que calcular a diferença de uma hora pra outra…
e tenho que exibir somente onde a diferença é maior que 05 min… é pra controle de ponto…
e olha como está minha classe…
Aqui é onde faço a comparação . e por se tratar de comparar Data com String . fiz dois métodos pra poder converter tudo pra HH:mm.
até ai estava tudo certinho …
mas agora que preciso fazer esse cálculo pra ter a diferença é que vem o problema…
private List<CompTimeSheetBiometrico> listComp = new ArrayList<CompTimeSheetBiometrico>();
private List<TimeSheetBio> listaTimeSheet = new ArrayList<TimeSheetBio>();
private List<Biometrico> listaBiometrico = new ArrayList<Biometrico>();
public List comparaTimeSheetBiometrico(Date dataIni, Date dataFim) {
listaTimeSheet = retornaConsultaTimeSheet(dataIni, dataFim);
listaBiometrico = retornaConsultaBiometrico(dataIni, dataFim);
for (Biometrico bt : listaBiometrico) {
CompTimeSheetBiometrico comp = new CompTimeSheetBiometrico();
for (TimeSheetBio ts : listaTimeSheet) {
if (bt.getSigla().equals(ts.getSigla()) && bt.getData().equals(ts.getData())) {
comp.setSigla(bt.getSigla());
comp.setData(bt.getData());
comp.setN_apropriacao(ts.getN_apropriacao());
comp.setNome(ts.getNome());
if (ts.getFlag_destino().equals("entrada")) {
if (!converteData(ts.getHora()).equals(formataHora(bt.getMenor_horario()))) {
if (diferencaMenor(dataIni, dataFim) >= 5) {
comp.setEntradaTS(ts.getHora());
comp.setEntradaBio(bt.getMenor_horario());
}
}
} else if (ts.getFlag_destino().equals("saida")) {
if (!converteData(ts.getHora()).equals(formataHora(bt.getMaior_horario()))) {
if(diferencaMaior(dataIni, dataFim) >= 5)
comp.setSaidaTS(ts.getHora());
comp.setSaidaBio(bt.getMaior_horario());
}
}
}
}
listComp.add(comp);
if (comp.getEntradaTS() == null && comp.getEntradaBio() == null && comp.getSaidaTS() == null && comp.getSaidaBio() == null) {
listComp.remove(comp);
}
}
return listComp;
}
private static String formataHora(Date hora) {
SimpleDateFormat formatoData = new SimpleDateFormat("HH:mm");
return formatoData.format(hora);
}
private String converteData(String dtData) {
SimpleDateFormat formatBra;
formatBra = new SimpleDateFormat("HH:mm");
Date newData;
try {
newData = formatBra.parse(dtData.toString());
return (formatBra.format(newData));
} catch (Exception e) {
return "Erro na conversão da data";
}
}
comecei a fazer o método…
e está assim … acredito que não esteja correto pois ele está gerando erro de NullPointer…
alguém pode apontar meu erro… ou me ajudar a criar um método mais fácil …
private int retornarDiferenca(Date data1, Date data2) {
return (int) ((data1.getTime() - data2.getTime()) / (1000 * 60 * 60));
}
private int diferencaMenor(Date dataIni, Date dataFim) {
listaTimeSheet = retornaConsultaTimeSheet(dataIni, dataFim);
listaBiometrico = retornaConsultaBiometrico(dataIni, dataFim);
Integer diferenca= 0;
for (Biometrico bio : listaBiometrico) {
for (TimeSheetBio ts : listaTimeSheet) {
try {
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date data1 = df.parse(ts.getHora());
Date data2 = bio.getMenor_horario();
diferenca = retornarDiferenca(data1, data2);
} catch (java.text.ParseException parse) {
parse.printStackTrace();
}
}
}
return diferenca;
}