谷歌数据存储->;将DateTime属性与日期进行比较

谷歌数据存储->;将DateTime属性与日期进行比较,datetime,servlet-filters,google-cloud-datastore,Datetime,Servlet Filters,Google Cloud Datastore,我就是找不到以下问题的答案: 我的Google App Engine数据存储中有一些实体,它们都有一个“日期和时间”类型的属性。我的数据存储控制台向我显示该属性的格式。看起来是这样的: 2016年2月16日,欧洲中部时间下午7:20 现在我想做一个查询,只返回特定日期之后的实体。但是我该如何确定日期的格式呢?我尝试了以下方法: @ApiMethod(name = "getUpdatedEpisodes", path = "getUpdatedEpisodes") public List<E

我就是找不到以下问题的答案:

我的Google App Engine数据存储中有一些实体,它们都有一个“日期和时间”类型的属性。我的数据存储控制台向我显示该属性的格式。看起来是这样的:

2016年2月16日,欧洲中部时间下午7:20

现在我想做一个查询,只返回特定日期之后的实体。但是我该如何确定日期的格式呢?我尝试了以下方法:

@ApiMethod(name = "getUpdatedEpisodes", path = "getUpdatedEpisodes")
public List<Episode> getUpdatedEpisodes(@Named("lastUpdate") String lastUpdate) {

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy, hh:mm a z");
    Date date = null;
    try{
        date =  sdf.parse(lastUpdate);
    }catch (Exception ex){

    }

    Query.Filter filter =
            new Query.FilterPredicate("lastUpdate",
                    Query.FilterOperator.GREATER_THAN,
                    date);

    Query q = new Query("Episode").setFilter(filter);
    PreparedQuery pq = datastore.prepare(q);
repository.getInstance(context).lastUpdate = DateTime.now(DateTimeZone.forID("CET")).toString("dd/MM/yy, hh:mm a z");
在调试时,我可以看到这个字符串

2016年2月16日7点24分。格林尼治时间+01:00


如果我用这个字符串再次尝试我的API,我仍然会得到我所有的剧集,所以没有进行过滤。这是因为如果我的日期和谷歌的日期格式不完全相同,就无法进行比较吗?如何解决此问题?

您可以使用
日期对象,而不是使用
字符串作为日期属性:

import java.util.Date;
...
repository.getInstance(context).lastUpdate = new Date();
数据存储将存储此属性,以便按时间顺序(或反时间顺序)对其进行排序,并且查询筛选器将按预期工作


我解决了这个问题,将数据存储中的日期存储为毫秒,而不是日期和时间。这样,我只有一个易于比较的64位整数