2016-03-25 4 views
0

Swiftで2回比較し、NSComparisonResultを使用する必要があります。午後10時から午後11時59分の間に正しい結果が得られます。これらの時代とは逆の結果を示しています。誰でもこの問題が何であるか知っていますか?以下はサンプルコードとシナリオです。 10:30 PMはテストする時間の例ですが、いつでもテストできます。NSComparisonResultが午後10時以上で正常に動作しない

// 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 
+0

を... –

答えて

2

文字列比較を実行しています。ですから、これらの2つの文字列を比較している、例えば:

10:00:00 PM EDT 
9: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"です。

入力日付から時分秒を抽出し、数値で比較したいとします。あなたはスウィフト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.") 
} 
+0

おかげで、はい、私は文字列を比較されました。このアプローチで試してみましょう。 –

+0

それは完璧に働いています、ありがとう、もう一度 –

関連する問題