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

时间:2016-03-25 02:26:53

标签: ios swift datetime-comparison

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

1 个答案:

答案 0 :(得分:2)

您正在执行字符串比较。所以你要比较这两个字符串,例如:

DwmExtendFrameIntoClientArea

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

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

"9:00:00 PM EDT" > "10:00:00 PM EDT"