我通過Stackoverflow進行了大量搜索,但是我還沒有找到針對我的問題的答案。過濾所有事件的數組,並查找哪些事件正在進行
我正在開發一個應用程序,併爲某些事件獲取JSON數據。我得到的是事件的開始時間和事件的持續時間。所有數據都以String形式接收。
在應用程序的一個屏幕中,我只想顯示當前正在進行的事件。
例如:
Class Event {
var startTime: String?
var duration: String?
}
let event1 = Event()
event1.starTime = "12-12-2016, 10:50 AM"
event1.duration = "50min"
let event2 = Event()
event2.starTime = "12-12-2016, 09:50 AM"
event2.duration = "40min"
let event3 = Event()
event3.starTime = "12-12-2016, 10:10 AM"
event3.duration = "90min"
let allEvents = [event1, event2, event3]
,讓說,當前日期和時間是二○一六年十二月十二日,11:00 AM。如果我們將它們與當前日期進行比較,如何過濾/查找所有仍在進行的事件?
預先感謝您。
編輯:我的溶液
我創建方法dateString和durationString轉換爲開始日期:日期和結束日期:日期
static func convertDateStringAndDurationStringToStartAndEndDate(date: String, duration: String) -> (start: Date, end: Date)? { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" guard let startDate = dateFormatter.date(from: date) else { return nil } guard let duration = Int(duration) else { return nil } // recived interval is in minutes, time interval must be calculated in seconds let timeInterval = TimeInterval(Int(duration) * 60) let endDate = Date(timeInterval: timeInterval, since: startDate) return (startDate, endDate) }
對於我已經創建分離方法過濾。在我的情況下,我正在使用Realm數據庫,但您會明白這一點。
static func filterResultsForNowPlaying(results: Results<Show>?) -> Results<Show>? { let currentDate = NSDate() let datePredicate = NSPredicate(format: "startDate <= %@ AND %@ <= endDate", currentDate, currentDate) let filteredShows = results?.filter(datePredicate) return filteredShows }
爲什麼你不的保存日期'Date'? –
我知道如何將「startTime」保存爲Date對象,但我不知道如何在我的情況下使用持續時間。 – Excalibur
如果你的'duration'字段總是有「* min」格式,那麼你可以刪除「min」插入並轉換爲int –