NSComparisonResult 在晚上 10 点及以上未按预期工作

NSComparisonResult is not working as expected for 10 PM and above

我需要在 Swift 中比较两次并使用 NSComparisonResult 我可以得到正确的结果,直到晚上 10 点到 11:59 之间的时间。这些时间显示相反的结果。任何人都知道这是什么问题?下面是示例代码和场景。 10:30:00 下午是测试的示例时间,但您可以随时进行测试。

// For test, Current time 10:30:00 PM
let currentTime = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .NoStyle, timeStyle: .LongStyle)

let closeTimeCompareResult: NSComparisonResult = currentTime.compare("10:00:00 PM EDT")
print("DinnerClose: \(closeTimeCompareResult.rawValue)")
// Expected result is -1 but, getting as 1

// It works perfect until 9:59:59 PM
let closeTimeCompareResult9: NSComparisonResult = currentTime.compare("9:00:00 PM EDT")
print("DinnerClose: \(closeTimeCompareResult9.rawValue)")
// As expected result is -1 

您正在执行字符串比较。因此,您正在比较这两个字符串,例如:

10:00:00 PM EDT
9:00:00 PM EDT

字符串比较比较每个字符串的相应字符,从每个字符串的第一个字符开始。 "10:00:00 PM EDT"的第一个字符是"1""9:00:00 PM EDT"的第一个字符是"9"。在 Unicode 和 ASCII 中,"9" 是代码点 57,"1" 是代码点 49。因为 57 > 49,所以 "9" > "1""9:00:00 PM EDT" > "10:00:00 PM EDT"

您可能想从输入的日期中提取小时、分钟和秒,然后比较它们的数值。如果您已使用 Swift 2.2 升级到 Xcode 7.3,那么您可以像这样使用 tuple comparison

let date = NSDate()
let components = NSCalendar.currentCalendar().components([.Hour, .Minute, .Second], fromDate: date)
let hms = (components.hour, components.minute, components.second)
if hms >= (21, 0, 0) && hms < (22, 30, 0) {
    print("\(date) is between 9 PM and 10:30 PM in the system's time zone.")
}