2014-06-19 81 views
10

问题:swift中的时间比较

我需要比较2次 - 当前时间和一个设置。如果设定的时间是未来的时间,则查明在未来的时间内剩余多少分钟。

其他信息:

我目前使用

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

这是我从另一个答案抢在SO如何得到诠释格式的当前时间。然后我把未来的时间分成小时(Int)和分钟(Int),然后比较这些......但当你超过小时障碍时,这会变得很奇怪。

+1

见... HTTP截止日期://stackoverflow.com/questions/5965044/how-to-compare-two-nsdates-这是更多最近的和对这个问题的第一个评论。 – Jack

回答

22

您有比较功能比较2 NSDate知道哪一个更近。它返回NSCompareResults

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

从2 NSDate获得距离(以秒为单位),您有.timeIntervalSinceDate()。那么,你知道如何转换为分钟,小时,...

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

let compareResult = date1.compare(date2) 

let interval = date1.timeIntervalSinceDate(date2) 
4

使用日期进一步日期timeIntervalSinceDate并通过更早的日期参数,这将给时差

10

只是补充以@ tyt_g207的答案,我找到了比较方法,但没有找到NSComparisonResult.OrderedDescending和其他人。我用类似下面的修改,以核对当天的日期

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

这是全部在UTC?比较当地时间呢? –

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. 

    }