按最小和最大日期搜索邮件会产生错误的结果

时间:2018-05-09 10:49:18

标签: java javamail java-time

我正在使用javax.mail类来连接到microsoft outlook和获取邮件。 我想要做的是找到2个日期之间发送的所有消息。 我将最小和最大日期作为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.这怎么可能?

0 个答案:

没有答案