Calendar, GregorianCalendar

Olá, tudo bãozim??? :wink:

Temos páginas JSP que chamam um método q eu criei, passando
como parâmetro Strings que serão usadas para filtrar
dados em um intervalo de datas.
Exemplos de strings:

dtInitial = "29/09/2003"; dtFinal = "28/10/2003"

O método que eu criei:

public ArrayList listHistory(String dtInitial, String dtFinal);

No Bean que eu criei, ele é do tipo Calendar.

Então, gostaria de saber qual o jeito mais fácil de jogar (setar)
estas duas datas em dois Calendars ou GregorianCalendars.

Estes calendar serão comparados na query do hibernate:

from History where dtHistory = dataCalendar

Se alguém puder me dar umas idéias sobre isso!! :oops:

Valew, abraço[/code]

neste exemplo você pode tratrar a data como um java.util.Date, se você mapear como calendar o Hibernate vai comparar até os milisegundos…

na Interface Query existem também os métodos setCaledar() caso queira mesmo fazer assim

Query q =session.createQuery("from History where dtHistory = ?"); 
q.setDate(0,new Date());
List l = q.list();

Olá… eu novamente com alguns problemas…

Não tem como eu fazer esta query sem usar o setCalendar(),
setDate(), fazendo direto no método createQuery() ???

Ficando ± assim:

Public List listUsers(Calendar dtInitial, Calendar dtFinal) 
{ 
   String query = "from User u "; 
    
   query += "where u.dtInclusion >= " + dtInitial; 
   query += "and u.dtInclusion <= " + dtFinal; 

   sess.createQuery(query); 
}

sim, é possível.

é só vc formatar a data do jeito certo que deve funcionar.

…mas, tads, pra que vc quer fazer isso, se o Hibernate te da uma API pra fazer a mesma coisa sem malabarismos? :smiley:

bem dito. Caso vc precise manipular datas, vc manipula objetos :smiley:

este é o princípio :wink:

Vcs estão querendo dizer usando o método:

   String q = "from User u where u.dtInclusion >= ? ";
   q += " and u.dtInclusion <= ? ";

   sess.find(q, ObjArray, TypeArray);

Seria deste jeito sem malabarismos???

ou então:

Query q = sess.createQuery("from Classe c where c.data=?"); q.setData(0,data); q.list();

Olá… :roll:

Eu tava fazendo dakela maneira pra testar as possibilidades de queries
que podem ser feitas.
Eu tinha visto na documentação uma query que utilizava Date
direto, mais ou menos do jeito q eu tava tentando fazer.

Mas assim tá bão demais.

Muito obrigado!!!

Grande abraço

Olá… putz! voltei neste lance de data…

Antes eu tava usando faixa de datas nos filtros, tipo o usuário
escolhe uma data inicial e uma data final… agora eu tenho q pegar
a data de hoje, por exemplo, ou uma data qualquer, tipo,
tudo que foi feito no dia 20/01/2004…

Eu tava tentando fazer assim, mas ele não retorna nada…
eu sei q o calendar testa até os milisegundos, mas eu setei tudo
pra fazer uma comparação de data… olha só:

	query += " f.dtFastTransaction >= ?";
	
	dtFastTransaction.set(Calendar.HOUR, 0);
	dtFastTransaction.set(Calendar.MINUTE, 0);
	dtFastTransaction.set(Calendar.SECOND, 0);		
	dtFastTransaction.set(Calendar.MILLISECOND, 0);
	
	listObj.add(dtFastTransaction);
	listType.add(Hibernate.CALENDAR);							
	
	query += " and f.dtFastTransaction <= ?";
	
	dtFastTransaction.set(Calendar.HOUR, 23);
	dtFastTransaction.set(Calendar.MINUTE, 59);
	dtFastTransaction.set(Calendar.SECOND, 59);		
	dtFastTransaction.set(Calendar.MILLISECOND, 999);
	
	listObj.add(dtFastTransaction);
	listType.add(Hibernate.CALENDAR);

O que eu posso fazer???
eu to setando assim a data:


GregorianCalendar dt = new GregorianCalendar();
dt.set(2004, 0, 26); // no caso, testando com a data de hoje

valew…

abraço

se vc quer o dia atual, pq somente não usa -> new java.util.Date() ?

Então, é q o dia o cara vai na tela e digita, tipo 26/01/2004

mas valew

[quote=“tads”]Então, é q o dia o cara vai na tela e digita, tipo 26/01/2004

mas valew[/quote]

usa um formatador entao…

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); Date data = format.parse("26/01/2004 ");

Olá…

tem alguma maneira do Calendar não compara segundos, milisegundos.

Tipo, faço uma query hibernate:

where f.dtTransaction = ?

onde eu compare somente o dia???

obrigado,

abraço

Eu tentei “parsear” a data tipo do jeito que me passaram:

Date dtFast = format.parse("26/01/2004");	
		
query += " f.dtFastTransaction = ?";
listObj.add(dtFast);
listType.add(Hibernate.DATE);

mas nem isso adianta… já olhei na base e é esta data mesmo.
Mas o java bean que eu criei, o atributo dtFastTransaction é
do tipo Calendar…

O que mais posso fazer???

Obrigado

abraço

muda dtFastTransaction de Calendar para Date :wink:

E ai… blz?

Blz, isso é uma solução…vou ver aki…

obrigado!!!

Galera eu estou tentando comparar datas tbm e buscar um resultado no hibernate, porem o retorno nao bem o que eu esperava. Por exemplo:
String data_inico = “12/01/2004”;
String data_fim = “25/01/2005”;

A query no hibernate:

public Collection getAcessosGroupByNroPosicao(Stirng aluno, Date data1, Date data2) throws HibernateException{
	Session session = HibernateSession.currentSession();
	String sql = "from com.megainfo.model.curso.Acesso acesso "
	+ "where acesso.data_inicio >='" + data1 + "' 

acesso.data_inicio<=’" + data2 + "’ and
and acesso.aluno.inc_aluno = “+aluno order by acesso.inc_acesso group by acesso.aula.inc_aula”;
//System.out.println(sql);
List result = session.find(sql);
return result;
}

Bom esta eh a query… no entanto ele estah retornado todas as datas do aluno… e nao tem comparado direito… alguem pode me ajudar???

Valeu desde jah

nao é assim eu acho, deste jeito vc apenas esta concatenando strings:
“where acesso.data_inicio >=’” + data1 + "’

faça:
“where acesso.data_inicio >= ?”

depois vc seta o parametro, ai o hibernate faz a conversão do objeto date:
query.setDate(…,data1)

veja nas docs do hibernate como fazer :slight_smile: