Javaを使ってDatastoreから日付のカラムを用いて、過去1ヶ月より新しいデータを取ってくる場合のクエリは以下のようになるかと思います。runQueryは https://hacknote.jp/archives/7017/ のものを使用
/** * @return * @throws DatastoreException */ public static List<Entity> listDatas() throws DatastoreException { Query.Builder query = Query.newBuilder(); query.addKindBuilder().setName("Hoge"); query.addOrder(DatastoreHelper.makeOrder("date", PropertyOrder.Direction.DESCENDING)); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, -1); query.setFilter(DatastoreHelper.makeFilter("date", PropertyFilter.Operator.GREATER_THAN_OR_EQUAL, DatastoreHelper.makeValue(cal.getTime()))); return runQuery(query); }
このとき DatastoreHelper.makeValue(cal.getTime())) でData型を渡すことができますが、このパラメータは実際には以下の様なプロパティになります。
この時タイムスタンプはmicrosecondsになります。
property_filter { property { name: "date" } operator: GREATER_THAN_OR_EQUAL value { timestamp_microseconds_value: 1441445046564000 } }
Datastoreから取得したデータも同じ形式になるため、
Date型にコンバートするときには1000で割らないとおかしなデータになります。
Date date2 = new Date(); date2.setTime(date.getTimestampMicrosecondsValue() / 1000);