谷歌数据存储->;将DateTime属性与日期进行比较
我就是找不到以下问题的答案: 我的Google App Engine数据存储中有一些实体,它们都有一个“日期和时间”类型的属性。我的数据存储控制台向我显示该属性的格式。看起来是这样的: 2016年2月16日,欧洲中部时间下午7:20 现在我想做一个查询,只返回特定日期之后的实体。但是我该如何确定日期的格式呢?我尝试了以下方法:谷歌数据存储->;将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
@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位整数