我正在尝试使用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'.
奇怪的是,我的约会与第二个“有效”模式非常匹配。
我该怎么办? 提前谢谢......
答案 0 :(得分:3)
我正在查看包com.hazelcast.query
中的hazelcast源代码2.5版,似乎Predicate
中使用的与日期相关的表达式需要采用其类型的格式:
java.util.Timestamp - "yyyy-MM-dd hh:mm:ss.SSS"
java.sql.Date - "yyyy-mm-dd"
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";