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");// timestamp
int tamanho = datas.length();
datas = datas.substring(0, tamanho-11);
datas = datas.replace('-', '/');
transforma=converteCalendar(datas);// transforma é um tipo Calendar
a variável cal retorna nula desse método:
public Calendar converteCalendar(String ddMMaaaa) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
Date dt = df.parse (ddMMaaaa);
Calendar cal = Calendar.getInstance();
cal.setTime (dt);
return cal;
}
Como ela é nula ao passa-la como referência da null pointer…
Muito Obrigado
O que está retornando dessa linha abaixo?
datas = conecta.resultset.getString("dt_emprestimo");// timestamp
Por que não usa getDate() no lugar de getString()?
“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…
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.
Bruno, ele para antes dessa outra chamada
diferenca = d.verificaData(transforma);
método da classe Diferenca
public int verificaData(Calendar dataEmp) {
dataDesejada.set(2009, 12, 12); // atribui a data
int dia = calendario.get(Calendar.DAY_OF_MONTH);
int mes = calendario.get(Calendar.MONTH);
int ano = calendario.get(Calendar.YEAR);
mes++;
dataAtual.set(ano, mes, dia);
Integer atraso = 0;
while (dataEmp.before(dataAtual)){
atraso++;
dataAtual.add(Calendar.DAY_OF_WEEK, 1);
}
obrigado
Dá um clean no projeto.
Não é para dar erro.
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.
ViniGodoy como usar o getDate para pegar TimeStamp?
[quote=Graciano]isso não vai dar um loop infinito?
while (dataEmp.before(dataAtual)){
atraso++;
dataAtual.add(Calendar.DAY_OF_WEEK, 1);
}
[/quote]
Acho que ele quis dizer:
while (dataAtual.after(dataEmp)){
atraso++;
dataAtual.add(Calendar.DAY_OF_WEEK, -1);
}
[/quote]
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?
Tente fazer diretamente:
Date datas = conecta.resultset.getDate("dt_emprestimo");
Calendar cal = Calendar.getInstance();
cal.setTime(datas);
Mysql…
então é só criar uma variável do tipo Date:
Date teste
teste= conecta.resultset.getDate(“dt_emprestimo”);
?
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.
esta como date, mas mesmo assim preciso converte-la para Calendar…
Tudo depende.
Se você quer fazer operações em cima da data, é melhor usar Calendar.
Sim, e eu já mostrei como fazer isso:
Calendar cal = Calendar.getInstance();
cal.setTime(dataQueVeioDoBancoDeDadosNoFormatoDate);
Date teste=new Date();
teste= conecta.resultset.getDate("dt_emprestimo");
Calendar cal=Calendar.getInstance();
cal.setTime (teste);
d.verificaData(teste);//Quando vou passar a referência da incompatibilidade pois teste continua Date :cry:
uffffffff
É pq vc tem que passar cal. A variável teste não vai se metamorfosear. rs
Date teste=new Date();
[code]teste= conecta.resultset.getDate(“dt_emprestimo”);
Calendar cal=Calendar.getInstance();
cal.setTime (teste);
d.verificaData(cal);[/code]