GAE按日期过滤查询结果究竟如何?
我正在尝试通过查询传递日期戳,但我无法让它工作。
在Google信息中心数据存储区查看器中,日期字段存储为gd:当类型格式为:YYYY-MM-DD HH:MM:SS但显示在网页上时显示为Mon Jul 15 20:15:35 UTC 2013.
我从jsp页面请求字符串Mon Jul 15 20:15:35 UTC 2013并解析它但过滤器不起作用。
String strDatestamp = req.getParameter("stamp");
String FormatString = "EEE MMM dd HH:mm:ss z yyyy";
Date datestamp = null;
try {
datestamp = new SimpleDateFormat(FormatString).parse(strDatestamp);
} catch (ParseException e) {
e.printStackTrace();
}
Filter filter = new FilterPredicate
("date", Query.FilterOperator.EQUAL, datestamp);
Query query = new Query("Example", key).setFilter(filter);
答案 0 :(得分:1)
计算机系统中的日期实际上表示为时间,特别是它在内部表示为unix time,以毫秒为单位。亲眼看看:date.getTime()
。
你看到的只是人类可读的表现形式,它缺乏毫秒级的精确度。
要查询特定秒,您需要在一秒钟内查询特定时间范围。因此,您需要在Mon Jul 15 20:15:35 UTC 2013
和Mon Jul 15 20:15:36 UTC 2013
之间进行范围查询(请注意第二个更改):
Filter startFilter = new FilterPredicate("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, startSecond);
Filter endFilter = new FilterPredicate("date", Query.FilterOperator.LESS_THAN, nextSecond);