我正在使用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.这怎么可能?