Как читать электронные письма с сегодняшнего дня в Outlook - PullRequest
2 голосов
/ 09 мая 2019

Я пытаюсь прочитать электронные письма, которые я получил сегодня, только через API javax.mail.

Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);

ReceivedDateTerm term = new ReceivedDateTerm(ComparisonTerm.EQ,new Date(Calendar.DAY_OF_MONTH));

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

Приведенный выше код не возвращает электронных писем, даже если они есть в моем почтовом ящике.

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Кажется, что конструктор Date принимает long, который представляет миллисекунды с 1 января 1970 года. Однако Calender.DAY_OF_MONTH, похоже, возвращает только целое число, представляющее день месяца.Я бы порекомендовал использовать что-то вроде System.currentTimeMillis() для получения даты в миллис.

Ссылки:

https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date-long-

https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--

В чем разница между добавлением DAY_OF_MONTH или DAY_OF_YEAR к объекту календаря?

0 голосов
/ 09 мая 2019

Предостережение: я не знаю JavaMail и не понимаю точное поведение ReceivedDateTerm. Но я знаю время и дату. Если цель - определить первый момент сегодняшнего дня, читайте дальше.

Первый момент дня

Ваша обработка даты и времени неверна.

Современный подход использует классы java.time , определенные в JSR 310.

Для получения текущей даты требуется часовой пояс. В любой момент времени дата меняется по всему земному шару в зависимости от зоны.

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalDate today = LocalDate.now( z ) ;

Определите первый момент. Не обязательно время 00:00:00, поскольку некоторые даты в некоторых зонах начинаются в другое время, например 01:00:00.

ZonedDateTime zdt = today.atStartOfDay( z ) ;

Извлеките Instant для настройки в UTC. Тот же самый момент, та же самая точка на временной шкале, другое время настенных часов.

Instant instant = zdt.toInstant() ;

Конструктор для ReceivedDateTerm принимает объект java.util.Date, еще не обновленный до современной java.time framework.

Преобразование из нашего современного Instant в ужасный и неправильно названный класс наследия java.util.Date.

Date d = Date.from( instant ) ;

Передайте d в свой код JavaMail в качестве начального момента для вашего поиска.

0 голосов
/ 09 мая 2019

Не могли бы вы попробовать

ReceivedDateTerm term = new ReceivedDateTerm(ComparisonTerm.EQ,new Date(Calendar.getTime()));

или

SimpleDateFormat format= new SimpleDateFormat( "MM/dd/yy" );
java.util.Date dDate = format.parse("01/01/19");
SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,dDate );
...