2017-01-04 8 views
0

私は大学内に循環バス通知システムを提供するつもりです。時間配列内の現在の時刻に最も近い時刻を抽出します。大学円形バス到着通知システム

タイムアレイ(gateArray)で現在の時刻に最も近い時刻を抽出し、到着するまで何分待っているかを教えてください。

たとえば、配列gateArray = ["07:40"、 "08:00"、 "08:16"、 "08:32"、 "08:48"、 "09:04" 09:20 "]、 現在時刻が08:03の場合、配列の出力時刻は08:00ではなく08:16で、出発時刻と現在時刻の差は08:16(出発時刻)です。 08:03(現在の時間)で時間間隔を計算し、UITextView - > "13分後に出発"と表示します。 9:20 『抽出>>」へ

現在時刻9時05分午前>>ゲートアレイ』「9時04分」の抽出>> 4分後に出発へ

現在時刻09:00 >>ゲートアレイ翌日ケースの追加処理と

答えて

0

スウィフト3バージョン "出発15分後":

import UIKit 

struct ArrivalDataContainer { 
    var date = Date() 
    var timeString = "00:00" 
    var currentMinuteDifference = 0 
} 

let currentDate = Date() 

let unitFlags: Set = Set<Calendar.Component>([.day, .month, .year]) 
var components = NSCalendar.current.dateComponents(unitFlags, from: currentDate) 

let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"] 

var arrivalArray = [ArrivalDataContainer]() 

for timeString in gateArray { 
    let timeAndMinutes = timeString.components(separatedBy: ":") 
    components.setValue(Int(timeAndMinutes[0])!, for: .hour) 
    components.setValue(Int(timeAndMinutes[1])!, for: .minute) 
    let newDate = NSCalendar.current.date(from: components) 
    let difference = NSCalendar.current.dateComponents(Set<Calendar.Component>([.minute]), from: currentDate, to: newDate!).minute 
    let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference!) 
    arrivalArray.append(dataContainer) 
} 

let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first 

if let firstWithinSameDay = minimumPositiveDifference { 
    print("Departure in \(firstWithinSameDay.currentMinuteDifference) minute(s)") 
} 
else { 
    let largestNegativeDifference = arrivalArray.sorted(by: { $0.currentMinuteDifference < $1.currentMinuteDifference }).first 
    print("Next departure \(largestNegativeDifference?.timeString)") 
} 

スイフト2バージョン起源でしたアル答え。

import UIKit 

struct ArrivalDataContainer { 
    var date = NSDate() 
    var timeString = "00:00" 
    var currentMinuteDifference = 0 
} 

let currentDate = NSDate() 

let unitFlags: NSCalendarUnit = [.Day, .Month, .Year] 
let components = NSCalendar.currentCalendar().components(unitFlags, fromDate: currentDate) 

let gateArray = ["07:40", "08:00", "08:16", "08:32", "08:48", "09:04", "09:20", "23:00"] 

var arrivalArray = [ArrivalDataContainer]() 

for timeString in gateArray { 
    let timeAndMinutes = timeString.componentsSeparatedByString(":") 
    components.setValue(Int(timeAndMinutes[0])!, forComponent: .Hour) 
    components.setValue(Int(timeAndMinutes[1])!, forComponent: .Minute) 
    let newDate = NSCalendar.currentCalendar().dateFromComponents(components) 
    let difference = NSCalendar.currentCalendar().components([.Minute], fromDate: currentDate, toDate: newDate!, options: []).minute 
    let dataContainer = ArrivalDataContainer(date: newDate!, timeString: timeString, currentMinuteDifference: difference) 
    arrivalArray.append(dataContainer) 
} 

let minimumPositiveDifference = arrivalArray.filter{ $0.currentMinuteDifference > 0 }.sort({ $0.currentMinuteDifference < $1.currentMinuteDifference })[0].currentMinuteDifference 

print("Departure in \(minimumPositiveDifference) minute(s)") 
  1. は日
  2. Get times from string
  3. Get difference from current time and arrival dates
  4. として到着時間を表し

最小差とプリント出発間隔の文字列を選択してまだ最初のかどうかを把握する必要があります翌日が最も近い。それは、最もマイナスのわずかな差があるものかもしれません。

関連する問題