Распечатать все метки времени между двумя метками времени

Не знаете, что вы сделали. Я бы порекомендовал вам попробовать https://github.com/weaveworks/eksctl . Это позволяет вам настроить EKS с помощью одной команды.

0
задан Jack 18 January 2019 в 18:19
поделиться

1 ответ

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.

0
ответ дан Ole V.V. 18 January 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: