2013-06-24 1 views
1

J'essaye de construire un SqlPredicate avec Hazelcast qui devrait filtrer par une date.Hazelcast SqlPredicate sur l'objet Date

L'exception que je reçois est la suivante:

java.lang.RuntimeException: Unable to parse date from value: '2013-06-21 03:15:44.000' ! 
Valid formats are: 'EEE MMM dd HH:mm:ss zzz yyyy', 'yyyy-MM-dd hh:mm:ss.SSS' and 'yyyy-mm-dd'. 

La chose étrange est que ma date correspond exacly le deuxième motif « valide ».

Que dois-je faire? Merci à l'avance ...

Répondre

3

Je regarde le code source de Hazelcast, version 2.5, dans le paquet com.hazelcast.query, et il semble que les expressions liées à la date utilisés dans un Predicate besoin d'être dans le format suivant leur type :

  1. java.util.Timestamp - "yyyy-MM-dd hh:mm:ss.SSS"

  2. java.sql.Date - "yyyy-mm-dd"

  3. java.util.Date - "EEE MMM dd HH:mm:ss zzz yyyy"

Si vous pouvez facilement utiliser java.util.Timestamp, vous pouvez utiliser l'expression de date dans le format que vous avez. Si vous utilisez java.util.Date, alors pouvez-vous essayer la même date au format "EEE MMM dd HH:mm:ss zzz yyyy"?

Espérons que cela aide.

code source Hazelcast pertinent de Predicates.java collé ci-dessous:

 } else if (type instanceof Timestamp) { 
      if (value instanceof Date) { // one of java.util.Date or java.sql.Date 
       result = value; 
      } else { 
       result = DateHelper.parseTimeStamp(valueString); 
      } 
     } else if (type instanceof java.sql.Date) { 
      if (value instanceof Date) { // one of java.util.Date or java.sql.Timestamp 
       result = value; 
      } else { 
       result = DateHelper.parseSqlDate(valueString); 
      } 
     } else if (type instanceof Date) { 
      if (value instanceof Date) { // one of java.sql.Date or java.sql.Timestamp 
       result = value; 
      } else { 
       result = DateHelper.parseDate(valueString); 
      } 

Et de DateHelper.java

static final String timestampFormat = "yyyy-MM-dd hh:mm:ss.SSS"; 
static final String dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"; 
static final String sqlDateFormat = "yyyy-mm-dd"; 
+0

Excellent! Le message d'exception trop générique m'a dérouté. – Fuzzo

+1

Ma modification de cette réponse a été, je crois, rejetée par erreur. Mais je voudrais quand même faire remarquer qu'il n'y a pas de 'java.util.Timestamp' disponible en Java. @vikingsteve s'il vous plaît changer les références à 'java.sql.Timestamp' à la place. Merci. – kasur