2

GAE 究竟如何按日期过滤查询结果?

我试图通过查询传递一个日期戳,但我无法让它工作。

在 Google Dashboard Datastore 查看器中,日期字段存储为 gd:when 类型,格式为: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);
4

1 回答 1

1

计算机系统中的日期实际上表示为时间,在特定情况下,它在内部表示为以毫秒为单位的unix 时间。自己看: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);
于 2013-07-17T15:40:19.233 回答