Problema na formatação usando o "SimpleDateFormat"
7 respostas
alexlima72
Olá estou com um problema que está dificil de atropela-lo:
Eu uso o Eclipse + JavaBeans + BD-Oracle
Eu tenho 2 campos Date em uma tabela Oracle (leo_dtturno & leo_dtreal) então criei um vetor e no momento de jogar as variáveis formatadas para o vetor da erro(Type mismatch: cannot convert from String to Date)
Um campo eu jogo o Formato (DD/MM/YYYY) outro campo eu jogo (dd/MM/yyyy HH:mm:ss)
Segue…
publicVectoretal..............try{Connectionconexao=DriverManager.getConnection..........etcPreparedStatementsql=conexao.prepareStatement("SELECT leo_dtturno,leo_hrturno,leo_dtreal FROM leo_una_turno"+" order by leo_dtturno desc, leo_hrturno desc");ResultSetrs=sql.executeQuery();SimpleDateFormatformatador=newSimpleDateFormat("dd/MM/yyyy");SimpleDateFormatformatador2=newSimpleDateFormat("dd/MM/yyyy HH:mm:ss");while(rs.next()){Turnotrn=newTurno();Datedtgenerico=newDate();Datedtgenerico2=newDate();dtgenerico=rs.getDate("leo_dtturno");StringstrDataTurno=formatador.format(dtgenerico);dtgenerico2=rs.getTimestamp("leo_dtreal");/////JÁ USEI TODOS OS GETS E NÃO ADIANTOU....StringstrDataReal=formatador2.format(dtgenerico2);trn.leo_dtturno=strDataTurno;trn.leo_hrturno=rs.getString("leo_hrturno");trn.leo_dtreal=strDataTurno;///////AQUI 'DA O ERROa.add(trn);}rs.close();conexao.close();
Galera dificil de entender porq com um está Ok e com o outro não pois os 2 campos na tabela são DATETME no Oracle
Cara só uma observação o campo no seu banco tem que estar com o mesmo tipo, ou seja, preste atenção se vc num tá querendo formatar date campo que é timestamp ou vice-versa.
Pedrosa
Não use Date para campos de data do banco de dados prefira o Timestamp
privateTimestampseuCampo;//get e setsetSeuCampo(newSimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(rs.getTimestamp("leo_dtreal")))
S
Schumacher
Eai cara… Cara sinceramente caso vc não consiga resolver este problema faz o seguinte traz as datas formatadas no proprio select. Trazendo as datas formatadas no proprio select vc evitaria consumo de memoria e ainda por cime teria menos problemas no seu codigo.
Exemplo:
SELECT TO_CHAR(leo_dtturno, ‘DD/MM/YYYY’) AS LEO_DTTURNO,
TO_CHAR(leo_dtreal, ‘DD/MM/YYYY HH24:MI:SS’) AS LEO_DTREAL
FROM TABELA
Trazendo assim sempre estes campo virão com as datas no formato que vc deseja…
Boa Sorte.
T++
alexlima72
jimjr_ivan
Os dois campos são DateTime no Oracle só q um
e somente gravado a data e o Oracle deixa na boa e no vetor eu consigo trazer
o outro campo também é datetime só que está com a hora e em outras consultas eu consigo formatar usando o gettTimeStamp e a consulta vem DD/MM/YYYY hh:mm… isso q não entendi
tem um que tras o dia da semana outro com os segundos …
nao lembro qual…
isso é um modo
mas existem varios outros tbm
E
ebarros
Ow tbm vc poderia fazer algo to tipo como criar um get e set para os seus respectivos campos(leo_dtturno & leo_dtreal) e fazer assim:
/*Converte data String para Date no formato brasileiro "dd/MM/yyyy"*/publicStringgetLeoDtTurnoJDBC(){try{SimpleDateFormatformat=newSimpleDateFormat("dd/MM/yyyy");SimpleDateFormatformatjdbc=newSimpleDateFormat("yyyy-MM-dd");returnformatjdbc.format(format.parse(leoDtTurno));}catch(Exceptione){e.printStackTrace();return"";}}publicvoidsetLeoDtTurno(StringleoDtTurno){this.leoDtTurno=leoDtTurno;}publicvoidsetLeoDtTurnoJDBC(StringleoDtTurno){try{SimpleDateFormatformatjdbc=newSimpleDateFormat("yyyy-mm-dd");SimpleDateFormatformat=newSimpleDateFormat("dd/MM/yyyy");this.leoDtTurno=format.format(formatjdbc.parse(leoDtTurno));}catch(Exceptione){e.printStackTrace();}}//ai para outro bean(leo_dtreal) vc faz a mesma coisa passando o formato q vc quer "dd/MM/yyyy HH:mm:ss)", //ou vice-versa, sei lah.
Boa sorte At+!
alexlima72
Pessoal,
Obrigado pelas Dicas eu resolvi meu problema.
Estava na formatação (dd/MM/yyyy HH:mm:ss) mudei o HH para minusculo.
eBarros :lol:: Eu ja havia criado os gets e sets paraos campos…Obrigado
tlink.k :lol:: Obrigado pela dica. Mais uma que poderei futuramente utilizar.
Schumacher: Eu já tentei usar no comando sql (TO_char) e me truxe o ano ‘0007’
Pedrosa :lol:: Eu fiz da maneira que vc me passou e o compilador me sugeriu q criasse como string também (veja abaixo) lembrando q antes de postar aqui eu havia criado os gets e sets dos campo entao eu criei com outro nome.
private Date setLeo_dtreal_timestamp(String string) {
// TODO Auto-generated method stub //<--------- (este comentário foi o Eclipse quem colocou)
return null;
}
public Timestamp getLeo_dtreal_timestamp() {
return leo_dtreal_timestamp;
}
public void setLeo_dtreal_timestamp(Timestamp leo_dtreal_timestamp) {
this.leo_dtreal_timestamp = leo_dtreal_timestamp;
}
Schumaker :lol:: consegui compilar e testei mas trouxe o campo ‘nulo’ no lugar da formatacao.
Mas mesmo assim Obrigado pela dica pois vai ser util para outros métodos.
Obrigado pessoal…é uma satisfação sempre bom contar com o GUJ