0

我需要在 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 
4

1 回答 1

2

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

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

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

您可能希望从输入日期中提取小时、分钟和秒,然后对它们进行数字比较。如果您已经使用 Swift 2.2 升级到 Xcode 7.3,那么您可以使用这样的元组比较

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.")
}
于 2016-03-25T02:39:48.343 回答