我正在使用Java EWS API,而且我在使用AQS字符串搜索Exchange服务器中的邮件时遇到问题。
我需要在特定日期和时间之后收到所有消息。 只传递日期一切正常,问题就来了,当我打发时间。 我不确定我需要在查询中使用的格式,本文中缺少文档。
这是我的代码:
protected static void searchByCategoryAndDateOldVersion() throws Exception{
ItemView view = new ItemView(Integer.MAX_VALUE);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
String aqs = "category:categoryToSearch AND received:>=2017-03-21T10:35:00";
FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox, aqs, view);
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
System.out.println("Items found: " + findResults.getTotalCount());
for (Item item : findResults) {
System.out.println(item.getSubject());
}
}
正如我所说的,如果我在没有T10:35:00部分的情况下设置参数,那么一切正常。
如何告诉EWS在特定时间之后只检索消息?
P.S。我必须使用AQS作为Exchange版本我不支持使用SearchFilter进行类别搜索
答案 0 :(得分:0)
好的,我找到了解决方案。
只需添加一个Calendar变量,使用DateFormat对其进行格式化并将其传递给查询字符串:
protected static void searchByCategoryAndDateOldVersion() throws Exception{
ItemView view = new ItemView(Integer.MAX_VALUE);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
Calendar calendar = new GregorianCalendar(2017, 2, 21, 10, 35, 0);
Date time = calendar.getTime();
DateFormat dateFormat = new SimpleDateFormat();
String dateLimit = dateFormat.format(time);
String aqs = String.format("category:categoryToSearch AND received:>=%s", dateLimit);
FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox, aqs, view);
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
System.out.println("Items found: " + findResults.getTotalCount());
for (Item item : findResults) {
System.out.println(item.getSubject());
}
}