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, от пятницы до вторника
}