1

我正在尝试使用 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'.

奇怪的是,我的日期与第二个“有效”模式完全匹配。

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

4

1 回答 1

3

我正在查看包中的 hazelcast 源代码 2.5 版,com.hazelcast.query似乎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"

如果您可以轻松使用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";
于 2013-06-24T10:47:22.883 回答