关于Date对象的Hazelcast SqlPredicate

时间:2013-06-24 08:02:26

标签: sql date hazelcast

我正在尝试使用Hazelcast构建一个SqlPredicate,它应按日期过滤。

我得到的例外情况如下:

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'.

奇怪的是,我的约会与第二个“有效”模式非常匹配。

我该怎么办? 提前谢谢......

1 个答案:

答案 0 :(得分:3)

我正在查看包com.hazelcast.query中的hazelcast源代码2.5版,似乎Predicate中使用的与日期相关的表达式需要采用其类型的格式:

  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"

  4. 如果您可以轻松使用java.util.Timestamp,则可以使用您拥有的日期表达式。

    或者,如果您使用的是java.util.Date,那么您可以使用"EEE MMM dd HH:mm:ss zzz yyyy"格式尝试相同的日期吗?

    希望这有帮助。

    来自Predicates.java的相关hazelcast源代码粘贴在下面:

            } 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);
                }
    

    来自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";