Я думаю, что лучше определить, является ли закрытый час до или после полуночи, а затем рассчитать новую дату по-разному, исходя из этого
let calendar = Calendar.current
if weekday == 1 || 20...23 ~= hour {
if let next = calendar.date(byAdding: .day, value: 1, to: date),
let opening = calendar.date(bySettingHour: 9, minute: 0, second: 0, of: next) {
datePicker.setDate(opening)
}
} else if 0..<8 ~= hour {
if let opening = calendar.date(bySettingHour: 9, minute: 0, second: 0, of: date) {
datePicker.setDate(opening)
}
}