Olá estou tentando converter uma String para Calendar…pesquisei aqui como faze-lo, mas cheguei a um ponto de onde não sei como resolver:
datas=conecta.resultset.getString("dt_emprestimo");// timestampinttamanho=datas.length();datas=datas.substring(0,tamanho-11);datas=datas.replace('-','/');transforma=converteCalendar(datas);// transforma é um tipo Calendar
Por que não usa getDate() no lugar de getString()?
Jrmanzini
“2009-11-10 15:56:49.0” - retorna essa data do meu banco que esta como TIMESTAMP…depois retirei as Strings, ta indo certinho pro método, o problema é na hora da conversão…
B
Bruno_Laturner
Por favor dê uma olhada novamente, limpe os teus .classe e compile novamente.
Calendar.getInstance() nunca retorna null. Se retornasse, cal.setTime daria um NullPointeException, e o método não retornaria.
Jrmanzini
Bruno, ele para antes dessa outra chamada
diferenca=d.verificaData(transforma);
método da classe Diferenca
publicintverificaData(CalendardataEmp){dataDesejada.set(2009,12,12);// atribui a dataintdia=calendario.get(Calendar.DAY_OF_MONTH);intmes=calendario.get(Calendar.MONTH);intano=calendario.get(Calendar.YEAR);mes++;dataAtual.set(ano,mes,dia);Integeratraso=0;while(dataEmp.before(dataAtual)){atraso++;dataAtual.add(Calendar.DAY_OF_WEEK,1);}
obrigado
G
Graciano
Dá um clean no projeto.
Não é para dar erro.
ViniGodoy
Ainda acho que é melhor usar o getDate. Você pode pegar dados do tipo TimeStamp com ele. Depois, fica fácil definir a data para um Calendar, diretamente.
Jrmanzini
ViniGodoy como usar o getDate para pegar TimeStamp?
G
Graciano
…falha minha
ViniGodoy
Graciano:
isso não vai dar um loop infinito?
while (dataEmp.before(dataAtual)){
atraso++;
dataAtual.add(Calendar.DAY_OF_WEEK, 1);
}
Acho que ele quis dizer:
while (dataAtual.after(dataEmp)){
atraso++;
dataAtual.add(Calendar.DAY_OF_WEEK, -1);
} [/quote]
ViniGodoy
Timestamp é só um nome que o banco de dados costuma a dar para um tipo de tempo. O driver do seu DB deve ser capaz de lidar com essa diferença, e obter o objeto correto usando o getDate.
Que banco você está usando?
ViniGodoy
Tente fazer diretamente:
Date datas = conecta.resultset.getDate("dt_emprestimo");
Calendar cal = Calendar.getInstance();
cal.setTime(datas);
Jrmanzini
Mysql…
então é só criar uma variável do tipo Date:
Date teste
teste= conecta.resultset.getDate(“dt_emprestimo”);
?
ViniGodoy
Sim, deveria ser só isso sim. Não tem pq ler um tipo que representa datas do banco como string, para depois converte-lo para data novamente.
Jrmanzini
esta como date, mas mesmo assim preciso converte-la para Calendar…
G
Graciano
Tudo depende.
Se você quer fazer operações em cima da data, é melhor usar Calendar.
ViniGodoy
Sim, e eu já mostrei como fazer isso:
Calendar cal = Calendar.getInstance();
cal.setTime(dataQueVeioDoBancoDeDadosNoFormatoDate);
Jrmanzini
Dateteste=newDate();teste=conecta.resultset.getDate("dt_emprestimo");Calendarcal=Calendar.getInstance();cal.setTime(teste);d.verificaData(teste);//Quando vou passar a referência da incompatibilidade pois teste continua Date :cry:
uffffffff
ViniGodoy
É pq vc tem que passar cal. A variável teste não vai se metamorfosear. rs
Date teste=new Date();
Datedatas=newDate();datas=conecta.resultset.getDate("dt_emprestimo");Calendarcal=Calendar.getInstance();cal.setTime(datas);d.verificaData(cal);//aqui da null
método verifica…
publicintverificaData(CalendardataEmp){dataDesejada.set(2009,12,12);// atribui a dataintdia=calendario.get(Calendar.DAY_OF_MONTH);intmes=calendario.get(Calendar.MONTH);intano=calendario.get(Calendar.YEAR);mes++;dataAtual.set(ano,mes,dia);Integeratraso=0;while(dataEmp.after(dataAtual)){// atraso++;// incrementar qtde de diasdataAtual.add(Calendar.DAY_OF_WEEK,1);}returnatraso;}
valeu
ViniGodoy
Essa variável d não é nula?
Por que não usa o depurador para descobrir onde está o nulo? Certamente não é no calendar, a conversão você já fez.
Jrmanzini
verdade cara esqueci de instânciar o objeto d…muito obrigado pela paciêcia do ViniGodoy e dos outros que me auxiliaram…
abraços