Как получить дату и время двухчасового интервала? - PullRequest
1 голос
/ 14 марта 2020

Я пробовал несколько способов, но я не нашел работоспособного решения.
Мне нужен двухчасовой интервал datetime с сегодняшнего дня до следующих пяти дней, а временные рамки должны быть с утра 7:00 до ночи 22 : 00.

То, что я до сих пор пробовал, это:

    let cal = Calendar(identifier: Calendar.Identifier.gregorian)
    for i in 1..<6{
        let date = Date()
        var components = DateComponents()
        components.setValue(i, for: .day)
        let expirationCal = cal.date(byAdding: components, to: date)


        let calendar = NSCalendar.autoupdatingCurrent

        for i  in 0..<12 {

            var  newDateTime = calendar.date(byAdding: Calendar.Component.hour, value: 1, to: expirationCal!)
            let currentHour = calendar.component(.hour, from: newDateTime!)
            let hourInt = Int(currentHour.description)!

            if hourInt >= 8 && hourInt <= 22 {
                print(newDateTime)
            }
        }
    }

1 Ответ

0 голосов
/ 14 марта 2020

Мое предложение:

  • Рассчитать дату начала и окончания
  • Перечислить даты в полных часах от даты начала до конца и отфильтровать четные даты в заданном диапазоне

    let cal = Calendar(identifier: .gregorian)
    let startDate = Date()
    let endDate = cal.date(byAdding: .day, value: 5, to: startDate)
    let fullHourComponents = DateComponents(minute: 0, second: 0)
    
    var dates = [Date]()
    cal.enumerateDates(startingAfter: startDate, matching: fullHourComponents, matchingPolicy: .nextTime) { date, strict, stop in
        if let validDate = date {
            if validDate == endDate { stop = true; return}
            let currentHour = cal.component(.hour, from: validDate)
            if currentHour.isMultiple(of: 2), (7..<23) ~= currentHour {
                dates.append(validDate)
            }
        }
    }
    print(dates)
    

Учтите, что напечатанные даты указаны в UT C

...