java.time
DateTimeFormatter logDtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String[] logMessages = {
"2017-01-31 01:33:30 random text log message x",
"2017-01-31 08:34:30 sdfsd log message y",
"2017-01-31 11:35:30 sdfsdfsdf log message z",
"2017-01-31 12:30:30 random text log message x",
"2017-01-31 13:31:30 sdfsd log message y",
"2017-01-31 14:32:30 sdfsdfsdf log message z",
"2017-01-31 16:32:35 sdfsdfsdf log message a",
"2017-01-31 16:33:30 random text log message x",
"2017-01-31 16:34:30 sdfsd log message y",
"2017-01-31 16:35:30 sdfsdfsdf log message z",
"2017-01-31 16:36:35 sdfsdfsdf log message a"
};
String time1 = "2017-01-31 12:00:00";
String time2 = "2017-01-31 15:00:00";
LocalDateTime start = LocalDateTime.parse(time1, logDtf);
LocalDateTime end = LocalDateTime.parse(time2, logDtf);
Arrays.stream(logMessages)
.filter(lm -> {
TemporalAccessor parsedDateTime = logDtf.parse(lm, new ParsePosition(0));
LocalDateTime logDateTime = LocalDateTime.from(parsedDateTime);
return ! logDateTime.isBefore(start)
&& logDateTime.isBefore(end);
})
.forEach(System.out::println);
Вывод этого кода - это то, что вы просили:
2017-01-31 12:30:30 random text log message x
2017-01-31 13:31:30 sdfsd log message y
2017-01-31 14:32:30 sdfsdfsdf log message z
Я использую java.time, современныйAPI даты и времени Java.Я всегда рекомендую его для любой даты и времени на Java.Мне так приятно работать.
Я фильтрую интервал полуоткрытый между вашими временами.Это означает, что сообщение журнала с отметкой 2017-01-31 12:00:00 будет включено, а сообщение с отметкой 2017-01-31 15:00:00 не будет включено.Это обычное и рекомендуемое использование временных интервалов.Одним из преимуществ является то, что при фильтрации по смежным (непересекающимся) интервалам каждое сообщение журнала гарантированно будет включено ровно один раз.
Если ваш массив очень большой и всегда сортируется, а производительность имеет значение, вы можете воспользоваться преимуществами использованиябинарный поиск начала и конца нужного интервала.Найдите его, если он уместен, и вы еще не знаете, что это такое.
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time
.