首页 > 解决方案 > 按最小和最大日期搜索消息会产生错误的结果

问题描述

我正在使用这些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

所有消息都被正确提取并属于该区间,除了第一条消息, 如果大于 maxDate 的sentDate值,则该消息的 sendDate 的值大于 maxDate 的值,结果为 1。这怎么可能?(Tue Jun 20 19:01:57 AEST 2017)messages[0].getSentDate().compareTo(maxDate)

标签: javajakarta-mailjava-time

解决方案


推荐阅读