我正在尝试使用 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'.
奇怪的是,我的日期与第二个“有效”模式完全匹配。
我该怎么办? 提前致谢...
最佳答案
我正在查看 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";
关于sql - 日期对象上的 Hazelcast SqlPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270620/