java - Azure表存储无效输入

标签 java azure azure-storage azure-table-storage

我正在使用 Java 查询 Azure 表存储服务。

我正在基于时间戳查询 Azure 表。在执行查询之前,我将本地 java 日期转换为 UTC。

查询抛出 TableServiceException“请求输入之一无效。 请求 ID:59445f16-0002-007e-152d-b3e24d000000 时间:2016-05-21T06:50:34.5077574Z"

当我使用相同的日期并使用 Azure 存储资源管理器查询数据时;我能够获得所需的值,如下面的屏幕截图所示。

http://puu.sh/oZD6y/eadcc45859.png这让我想知道我做错了什么。

下面是我用来查询 Azure 表的代码。 endDate 是日期类型

String partitionFilter = TableQuery.generateFilterCondition(PARTITION_KEY,   QueryComparisons.EQUAL,
            partitionKey);
    String date2 = TableQuery.generateFilterCondition(TIMESTAMP, QueryComparisons.LESS_THAN_OR_EQUAL, endDate.getTime());
    String finalFilter = TableQuery.combineFilters(partitionFilter, Operators.AND, date2);

    CloudTable table = getTable(tableName);
    TableQuery<TableServiceEntity> query = TableQuery.from(TableServiceEntity.class).where(finalFilter);
    Iterable<TableServiceEntity> tableEntries = table.execute(query);
    return tableEntries;

下面的代码用于转换本地日期

    long ts = System.currentTimeMillis();
    Date localTime = new Date(ts);
    String format = "yyyy/MM/dd HH:mm:ss";
    SimpleDateFormat sdf = new SimpleDateFormat (format);


    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date gmtTime = new Date(sdf.format(localTime));
    System.out.println("Local:" + localTime.toString() + "," + localTime.getTime() + " --> UTC time:" + gmtTime.toString() + "-" + gmtTime.getTime());

这已经浪费了我很多时间。任何帮助将不胜感激。

最佳答案

(PartitionKey eq '1') and (Timestamp le 1463796341217L)

基本上您的查询有问题。本质上,Timestamp 是一种日期/时间 类型的属性,因此如果您自己编写 ODATA 查询,您的查询应该类似于:

(PartitionKey eq '1') and (Timestamp le datetime'some-date-time-value')

如果您注意到,这也是您在 Azure 存储资源管理器中执行的操作。

查看您的代码,您正在 endDate 上调用 getTime() 方法,该方法将返回自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。您需要做的是按原样使用 endDate 。然后 SDK 会将查询转换为 Azure 表服务可以理解的格式。

关于java - Azure表存储无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360074/

相关文章:

Java,从 DOM 获取带标签的文本内容,按照浏览器显示的顺序

java - Maven - Unresolved 对 [javax.activation, javax.annotation] 的引用

azure - 从 Azure 服务总线队列读取消息,但不是实时的

loops - Azure 逻辑应用 - 执行直到计数和超时属性

java - Microsoft.WindowsAzure.Storage : No valid combination of account information found - Tried to edit conn string, 但不起作用

Java addActionListener(this) 创建错误

java - 从静态上下文引用非静态方法

azure - StackExchange.Redis 超时

Azure 存储帐户 sku Standard_LRS 的二头肌部署失败

Java-Azure 列表 Blob 目录