Google App Engine查询按日期过滤

时间:2013-07-17 13:10:51

标签: java google-app-engine parsing

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

1 个答案:

答案 0 :(得分:1)

计算机系统中的日期实际上表示为时间,特别是它在内部表示为unix time,以毫秒为单位。亲眼看看:date.getTime()

你看到的只是人类可读的表现形式,它缺乏毫秒级的精确度。

要查询特定秒,您需要在一秒钟内查询特定时间范围。因此,您需要在Mon Jul 15 20:15:35 UTC 2013Mon 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);