Java. Как узнать, была ли суббота между двумя unix метками (в секундах)

Java. Мне нужно обновлять статистику за неделю, как узнать, была ли суббота между двумя unix метками(в секундах) ?


Ответы (1 шт):

Автор решения: kami

Если считать,что "суббота" - это интервал времени, то задача сводится к проверке пересечения имеющегося интервала (две unix-метки) c интервалом времени "суббота", следующей за и ближайшей к начальной точке имеющегося интервала:

public static boolean dateTimeIntersects(Timestamp dt1Start, Timestamp dt1End, Timestamp dt2Start, Timestamp dt2End) {
        return (dt1Start.compareTo(dt2End) <= 0) && (dt1End.compareTo(dt2Start) >= 0);
    }

Интервал "субботы" можно найти следующим образом:

        Timestamp saturdayStart = Timestamp.valueOf(
                ZonedDateTime.of(dt1.toLocalDateTime(), ZoneId.of("Z"))
                        .with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
                        .toLocalDateTime() // вероятно, здесь можно как-то упростить...
        );
        Timestamp saturdayEnd = Timestamp.from(saturdayStart.toInstant().plusSeconds(24*60*60 - 1));

И полный код метода "а была ли суббота" получается таким:

    public static boolean isSaturdayBetween(Timestamp dt1, Timestamp dt2){
        Timestamp saturdayStart = Timestamp.valueOf(
                ZonedDateTime.of(dt1.toLocalDateTime(), ZoneId.of("Z"))
                        .with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
                        .toLocalDateTime()
        );
        Timestamp saturdayEnd = Timestamp.from(saturdayStart.toInstant().plusSeconds(24*60*60 - 1));
        return dateTimeIntersects(dt1, dt2, saturdayStart, saturdayEnd);
    }

два простых теста:

public static void main(String[] args) {
    // write your code here
         System.out.println(isSaturdayBetween(Timestamp.valueOf("2021-12-05 00:00:00"), Timestamp.valueOf("2021-12-07 23:00:00"))); // false, от воскресенья до вторника
         System.out.println(isSaturdayBetween(Timestamp.valueOf("2021-12-03 00:00:00"), Timestamp.valueOf("2021-12-07 23:00:00"))); // true, от пятницы до вторника
    }
→ Ссылка