Поиск сообщений по минимальной и максимальной дате дает неверные результаты - PullRequest
0 голосов
/ 09 мая 2018

Я использую классы javax.mail для подключения к Microsoft Outlook и получения почты. Я хотел бы найти все сообщения, которые были отправлены между двумя датами. У меня есть минимальная и максимальная даты типа ZonedDateTime. Например:

ZonedDateTime minZonedDateTime = ZonedDateTime.of(2017, 6, 15, 0, 0, 0, 0, ZoneId.systemDefault());

ZonedDateTime maxZonedDateTime = ZonedDateTime.of(2017, 6, 20, 0, 0, 0, 0, ZoneId.systemDefault());

Мой часовой пояс по умолчанию - 'Australia/Sydney'. Поэтому, чтобы получить все письма между этими двумя датами, я делаю следующее:

 Date minDate = Date.from(minZonedDateTime.toInstant());
 Date maxDate = Date.from(maxZonedDateTime.toInstant());


 SentDateTerm minSentDateTerm = new SentDateTerm(ComparisonTerm.GE, minDate);
 SentDateTerm maxSentDateTerm = new SentDateTerm(ComparisonTerm.LE, maxDate);
 SearchTerm term = new AndTerm(maxSentDateTerm,minSentDateTerm);
 Folder folderInbox = store.getFolder("INBOX");
 folderInbox.open(Folder.READ_ONLY);

 Message[] messages = folderInbox.search(term);

Теперь, когда я печатаю sentDates всех полученных сообщений, я получаю следующий результат:

 Tue Jun 20 19:01:57 AEST 2017
 Mon Jun 19 18:31:31 AEST 2017
 Sun Jun 18 18:54:26 AEST 2017
 Sun Jun 18 18:31:24 AEST 2017
 Sun Jun 18 01:08:46 AEST 2017
 Sat Jun 17 00:54:27 AEST 2017
 Fri Jun 16 00:27:56 AEST 2017

Все сообщения правильно выбраны и принадлежат интервалу, за исключением первого сообщения, которое имеет sentDate значение (Tue Jun 20 19:01:57 AEST 2017) SentDate этого сообщения, если оно больше значения maxDate, что подтверждается результатом messages[0].getSentDate().compareTo(maxDate), равным 1. Как это возможно?

...