我尝试了几种方法,但没有找到可行的解决方案
从今天到接下来的五天,我需要两个小时的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)
}
}
}
我的建议:
- 计算开始和结束日期
-
从开始到结束按整小时枚举日期,并过滤给定范围中的偶数日期
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)
考虑打印日期为UTC