Google 数据存储 -> 比较日期时间-属性 与日期
Google Datastore -> Compare DateTime-Property with Date
我找不到以下问题的答案:
我的 Google App Engine 数据存储区中有实体,它们都具有 "Date and time" 类型的 属性。我的数据存储控制台向我显示了 属性 的格式。它看起来像这样:
2/16/16, 7:20 PM CET
现在我想做一个只在特定日期后返回实体的查询。但是我该如何格式化那个日期呢?我尝试了以下方法:
@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");
调试时我可以看到这个字符串看起来像
2/16/16, 7:24 nachm. GMT+01:00
如果我再次使用此字符串尝试 API,我仍然会得到我的所有剧集,因此没有进行过滤。这是因为我的日期和 Google 日期如果格式不完全相同就无法比较吗?我该如何解决这个问题?
您可以使用 Date
对象,而不是使用 String
作为您的日期 属性:
import java.util.Date;
...
repository.getInstance(context).lastUpdate = new Date();
Datastore 将存储这个 属性 以便它按时间顺序(或反时间顺序)排序并且查询过滤器将按预期工作。
https://cloud.google.com/appengine/docs/java/datastore/entities#Java_Properties_and_value_types
我通过将我的日期存储在数据存储中作为毫秒而不是日期和时间来解决这个问题。这样我就只有一个64位整数了,方便比较。
我找不到以下问题的答案:
我的 Google App Engine 数据存储区中有实体,它们都具有 "Date and time" 类型的 属性。我的数据存储控制台向我显示了 属性 的格式。它看起来像这样:
2/16/16, 7:20 PM CET
现在我想做一个只在特定日期后返回实体的查询。但是我该如何格式化那个日期呢?我尝试了以下方法:
@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");
调试时我可以看到这个字符串看起来像
2/16/16, 7:24 nachm. GMT+01:00
如果我再次使用此字符串尝试 API,我仍然会得到我的所有剧集,因此没有进行过滤。这是因为我的日期和 Google 日期如果格式不完全相同就无法比较吗?我该如何解决这个问题?
您可以使用 Date
对象,而不是使用 String
作为您的日期 属性:
import java.util.Date;
...
repository.getInstance(context).lastUpdate = new Date();
Datastore 将存储这个 属性 以便它按时间顺序(或反时间顺序)排序并且查询过滤器将按预期工作。
https://cloud.google.com/appengine/docs/java/datastore/entities#Java_Properties_and_value_types
我通过将我的日期存储在数据存储中作为毫秒而不是日期和时间来解决这个问题。这样我就只有一个64位整数了,方便比较。