Today, I was trying to access some data for my project on Twitter and filtering it using the creation date of the tweets. So I began by creating the usual
Criteria and added a few Restrictions. For filtering by date, I created Date objects for
Calendar.getTime() method and added the following
c.add(Restrictions.between("createdAt", startDate, endDate);
Surprisingly, this didn’t work as I had expected and I was getting an empty result. I Googled for it but couldn’t find much. The only thing was that the Restriction should work given the date. Well, I was in a hurry and didn’t try to dig it through. As a workaround, I tried writing HQL query to get the results but that didn’t work either.
This is what worked. I created the date using
SimpleDateFormat and parsing the date. Here’s what I did:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date startDate = format.parse("2011-11-09 00:00:00"); Date endDate = format.parse("2011-11-017 00:00:00"); c.add(Restrictions.between("createdAt", startDate, endDate)); List<StatusDto> statuses = c1.list(); // It works fine now
Its a quick hack and did work out for me. I was in bit of a hurry and didn’t try to dig up the reason for it now working earlier. Maybe, someone can point my mistake out in the comment. Anyway, I will update the post if I find the reason for it.