Я отвечу так, как будто это для реальной работы, поскольку вы не указали явно школьную работу.
ThreadLocalRandom
Используйте ThreadLocalRandom
, чтобы избежать каких-либо возможные проблемы параллелизма. Нет недостатка в использовании этого класса сверх Math.random
. И этот класс имеет удобные методы для генерации различных типов чисел, а не просто double
.
java .time
Никогда не используйте Calendar
или Date
. Эти ужасные классы даты и времени были вытеснены годами go современными java .time классами, определенными в JSR 310.
Получите сегодняшнюю дату.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
Добавьте случайное количество дней в течение следующих 30 дней.
int days = ThreadLocalRandom.current().nextInt( 1 , 31 ) ;
LocalDate localDate = today.plusDays( days ) ;
Дни могут различаться по продолжительности, например 23, 24, 25 или другое количество часов. Поэтому для вашей даты в вашей зоне рассчитайте максимальное количество секунд.
ZonedDateTime start = localDate.atStartOfDay( z ) ;
ZonedDateTime stop = localDate.plusDays( 1 ).atStartOfDay( z ) ;
Duration d = Duration.between( start.toInstant() , stop.toInstant() ) ;
long seconds = d.toSeconds() ; // In Java 9 and later. For Java 8, call `Duration::getSeconds`.
Это количество секунд становится максимальным для нашей продолжительности дня. Из этого мы выбираем случайное количество секунд.
long secondsIntoDay = ThreadLocalRandom.current().nextInt( 0 , seconds ) ;
ZonedDateTime zdt = start.plusSeconds( secondsIntoDay ) ;
Определите случайную продолжительность от 1 до 60 минут для истекшего времени каждого события.
int minutes = ThreadLocalRandom.current().nextInt( 1 , 61 ) ; // At least one minute, and less than 61 minutes.
Duration duration = Duration.ofMinutes( minutes ) ;
Определите ваш public class InterviewSlot
с двумя полями-членами: a ZonedDateTime
и Duration
.