2014-06-19 12 views
10

Domanda:Confronto di tempo in swift

Ho bisogno di confrontare 2 volte - l'ora corrente e una impostata. Se il tempo impostato è nel futuro, scoprire quanti minuti rimangono fino a detta ora futura.

Altro Info:

Attualmente sto usando

let date = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date) 
let hour = components.hour 
let minutes = components.minute 

che ho rubato da un'altra risposta su SO su come ottenere il tempo corrente in formato Int. Poi divido il tempo futuro in ora (Int) e minuti (Int) e paragone quelli ... Ma ciò diventa strano quando superi la barriera delle ore.

+1

Vedi ... http: //stackoverflow.com/questions/5965044/how-to-compare-two-nsdates- quale-è-più-recente e il primo commento su questa domanda .. – Jack

risposta

22

Si dispone della funzione di confronto per confrontare 2 NSDate per sapere quale è più recente. Esso restituisce NSCompareResults

enum NSComparisonResult : Int { 
    case OrderedAscending 
    case OrderedSame 
    case OrderedDescending 
} 

distanza Get (in secondi) da 2 NSDate, avete .timeIntervalSinceDate(). Poi, si sa come convertire in minuti, ore, ...

let date1 : NSDate = ... 
let date2 : NSDate = ... 

let compareResult = date1.compare(date2) 

let interval = date1.timeIntervalSinceDate(date2) 
4

Uso timeIntervalSinceDate di data in data ulteriore e passare la data in precedenza come parametro, questo darebbe la differenza di tempo

10

solo aggiungere alla risposta di @ tyt_g207, ho trovato il metodo di confronto, ma non ho trovato NSComparisonResult.OrderedDescending e gli altri. Ho usato qualcosa come il modificato qui sotto per controllare una data di scadenza contro la data odierna

let date1 : NSDate = expirationDate 
let date2 : NSDate = NSDate() //initialized by default with the current date 

let compareResult = date1.compare(date2) 
if compareResult == NSComparisonResult.OrderedDescending { 
    println("\(date1) is later than \(date2)") 
} 

let interval = date1.timeIntervalSinceDate(date2) 
+0

E 'tutto in UTC? Che dire del confronto tra le ore locali? –

5
let dateComparisionResult: NSComparisonResult = currentDate.compare("Your Date") 


    if dateComparisionResult == NSComparisonResult.OrderedAscending 
    { 
     // Current date is smaller than end date. 
    } 
    else if dateComparisionResult == NSComparisonResult.OrderedDescending 
    { 
     // Current date is greater than end date. 

    } 
    else if dateComparisionResult == NSComparisonResult.OrderedSame 
    { 
     // Current date and end date are same. 

    } 
Problemi correlati