Я использую классы 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. Как это возможно?