2

GAE はどのくらい正確にクエリ結果を日付でフィルタリングしますか?

クエリで日付スタンプを渡そうとしていますが、うまくいきません。

Google ダッシュボード データストア ビューアでは、日付フィールドは gd:when タイプとして YYYY-MM-DD HH:MM:SS の形式で保存されますが、Web ページに表示されると、Mon Jul 15 20:15:35 UTC 2013 と表示されます。

文字列 Mon Jul 15 20:15:35 UTC 2013 を jsp ページからリクエストして解析しましたが、フィルターが機能していません。

    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().

表示されるのは人間が判読できる表現のみであり、完全なミリ秒の精度がありません。

特定の秒を照会するには、1 秒以内の特定の時間範囲を照会する必要があります。Mon Jul 15 20:15:35 UTC 2013したがって、 と の間で範囲クエリを実行する必要がありますMon Jul 15 20:15:36 UTC 2013(2 番目の変更に注意してください)。

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 に答える