Busca usando Timestamp

Galera, tenha a seguinte situacao…

na minha tabela tem um campo Timestamp (DD/MM/YYYY HH:MM:SS.M)…

preciso fazer uma busca nessa tabela usando esse campo…o usuario pode trazer os resultados apenas do dia atual ou especificar uma data…

to com probleminha ao manipular as Strings de dia/mes/ano q vem e passa-las p/ Timestamp…

sugestoes??

valew

Você está buscando como String ou como Timestamp?
Onde está o problema que eu não entendí direito?

destro, a busca preciso fazer com Timestamp, certo?? pois no BD estah assim…

ou posso simplesmente passar uma String no SQL q o BD consegue interpretar??

ah, to usando o DB2…

Se o que você quer é desconsiderar a hora, faça assim:

sql = "SELECT A, B, C FROM XYZ WHERE TRUNC(N) = ?"; ps = conn.prepareStatement( sql ); ps.setDate( 1, new java.sql.Date( dt.getTime() ) );

Bom, a função TRUNC() do Oracle converte o timestamp apenas para DATE. Não sei qual função usar no DB2.

Voce ja tentou pegar a String converte-la em Timestamp e entao usar o setTimestamp do PreparedStatement?

Marcio Kuchma

tem exemplinho ae da transformacao?? :oops: :oops:

Nao testado: :smiley:

String str = "01/01/2005";
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(str);
Timestamp timestamp = new Timestamp(date.getTime());

Pensei nisso agora. Talvez tenha alguma maneira melhor.

Marcio Kuchma

quase lah…

o problema eh q to gravando o Timestamp assim:

		Locale.setDefault(new Locale("en", "US"));
		DateFormat dftFormatoDataHora = DateFormat.getDateTimeInstance();
		String date = dftFormatoDataHora.format(new Date());
		Date dtData = null;
		try {
			dtData = dftFormatoDataHora.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return new Timestamp(dtData.getTime());

se eu uso o metodo do kuchma, ele nao consegue parsear a String 01/01/2004 pq nao tah no formato dos US…

alguma solucao??

valew

[quote=rbarioni]

Locale.setDefault(new Locale("en", "US")); DateFormat dftFormatoDataHora = DateFormat.getDateTimeInstance(); String date = dftFormatoDataHora.format(new Date()); Date dtData = null; try { dtData = dftFormatoDataHora.parse(date); } catch (ParseException e) { e.printStackTrace(); } return new Timestamp(dtData.getTime()); [/quote]

Ele da dando erro nesse codigo? Se voce obtem a string com o DateFormat e faz o parse com o mesmo DateFormat nao poderia dar erro… :smiley:

[quote=rbarioni]se eu uso o metodo do kuchma, ele nao consegue parsear a String 01/01/2004 pq nao tah no formato dos US…

alguma solucao??[/quote]

Qual seria o “formato dos US”? MM/dd/yyyy? Nao seria apenas trocar o pattern no SimpleDateFormat?

Mas mesmo assim nao entendi… veja:

  • Voce obtem a data de algum lugar (input do usuario, p.ex.) em formato String.
  • Voce converte pra Date e usa o Date pra obter um Timestamp.
  • Dai com o Timestamp eh realizada a consulta.

A partir do momento que vira um Date nao tem mais problema, teoricamente - certo? Basta entao dar uma ajustada no parse com o SimpleDateFormat. :smiley:

Se nao for isso, mande mais detalhes.

Marcio Kuchma

o metodo q mandei retorna um Timestamp no formato yyyy-mm-dd hh:mm:ss.m e vai assim p/ banco…

a data vem de 3 combos no JSP, um p/ cada campo da data, dia/mes/ano…

ateh poderia reusar o metodo q mandei, mas nao consigo criar um Date passando valores p/ ele, pois tah deprecated…se uso qq outro artificio, vem no formato diferente e ferra minha consulta…

Timestamp não tem um formato “interno”. Talvez o toString() dele imprime o que vc mandou, mas não quer dizer que internamente seja isso. Tanto Timestamp quanto Date usam representação numérica internamente, baseado num long contando os milisegundos desde 1/1/1970.

E para juntar as três infos de dia + mês + ano:

Date d = new SimpleDateFormat(“ddMMyyyy”).parse( dia + mes + ano );

[quote=danieldestro]Timestamp não tem um formato “interno”. Talvez o toString() dele imprime o que vc mandou, mas não quer dizer que internamente seja isso. Tanto Timestamp quanto Date usam representação numérica internamente, baseado num long contando os milisegundos desde 1/1/1970.

E para juntar as três infos de dia + mês + ano:

Date d = new SimpleDateFormat(“ddMMyyyy”).parse( dia + mes + ano );[/quote]

fazendo isso, consegui o seguinte formato:

Wed Dec 08 00:00:00 BRST 2004

mas nao eh assim q preciso da data…

Pára tudo. Estamos com um problema de comunicação.

Você está querendo inserir no banco ou exibir a data?