Java 按日期(字符串)为GAE排序查询结果

Java 按日期(字符串)为GAE排序查询结果,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我在GAE数据存储中存储了数千个实体,其中一个字段“create”保存为日期字符串(标准格式) 我的问题是,是否仍然可以像这样进行查询: Query q = new Query("Post") .addSort("created", SortDirection.DESCENDING); 其中“created”实际上是一个日期字符串,存储方式如下:2014-12-11T14:31:43-08:00” 我试过了,但结果集是随机的,甚至不按日期排序 有没有办法通过调整

我在GAE数据存储中存储了数千个实体,其中一个字段“create”保存为日期
字符串
(标准格式)

我的问题是,是否仍然可以像这样进行
查询

Query q = new Query("Post")
                .addSort("created", SortDirection.DESCENDING);
其中“
created
”实际上是一个日期字符串,存储方式如下:
2014-12-11T14:31:43-08:00”
我试过了,但结果集是随机的,甚至不按日期排序


有没有办法通过调整GAE
查询来实现这一点呢?

这样不行

您需要属性为日期类型

import java.util.Date;

Date created = new Date();
Post.setProperty("created", created);

也许您可以执行一项任务,用创建的字符串实际转换为日期来更新所有实体并保存它。

即使GAE已将日期索引为字符串,因此“2014-12-11T14:31:43-08:00”在“2014-12-04T14:31:43-08:00”之后,这意味着自然排序顺序应该遵循


您是否为“创建”字段编制了索引?如果没有,GAE将忽略您在查询中给出的排序顺序。

必须有某种方法可以做到这一点,而不必全部更新,因为新实体将与该字符串日期一起保存。必须有吗?更有可能需要运行批处理作业将其转换为实时实体。对于这类任务。@PaulCollingwood如果问题不只是数据,而是许多应用程序存储在同一数据存储中,而一些应用程序存储日期为字符串(至少格式良好),该怎么办。因此,即使您对一组特定的数据运行批处理转换,也会有更多数据以格式良好的字符串形式存储。您必须将类型转换为Datetime…顺便说一句,将Datetime存储为字符串有什么意义?听起来您要处理的问题不止一个。是的,因为它已保存到具有“setProperty”的实体中方法(因此索引)