2016-08-20 25 views
1

私は2つの日付を素早くDayと比較しようとしています。しかし、このコードは、常に望ましい結果を返すしていないよう日付比較が間違った値を返しますか?

let workoutdate: NSDate = participantdata[self.lastindexchecked].workout!.start! 
let todaysdate = NSDate() 
let order = NSCalendar.currentCalendar().compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day) 

switch order { 
case .OrderedDescending: 
    print("DESCENDING") 
case .OrderedAscending: 
    print("ASCENDING") 
case .OrderedSame: 
    print("SAME") 
} 

:このsolutionに続いて、次のコードを書きました。

todaysdateは、に等しい。

2016-08-20 20:51:26 +0000 

workoutdateが等しい場合:トレーニング日に設定されている場合、しかし、

"DESCENDING" さ

2016-08-20 00:14:53 +0000 

結果異なるもの、例えば

2016-08-20 04:00:00 +0000 

結果は、実際には予測と同じです。

誰でも何が起こっているか考えていますか?

答えて

1

NSDateは、Foundationの基本的な構成であり、このようなバグが検出され、ずっと前に修正されていました。 Appleのバグだと思う前に、自分のバグをまず考えてみてください。そして、タイムゾーンを含む日付を扱う頭痛の大部分。

私はそうEDT(-0400)のタイムゾーンにいる:

todaysdate = 2016-08-20 20:51:26 +0000 = 2016-08-20 16:51:26 -0400 
workoutdate = 2016-08-20 00:14:53 +0000 = 2016-08-19 20:14:53 -0400 

あなたは私のタイムゾーンで発現されたとき、彼らは別の日に落ちるどのように見ることができるとDESCENDINGはここに期待ですまさにです。

あなたはいつもGTM使用するようにカレンダーを設定することによって、いくつかの方法でこれを解決することができます:それはアップルだったbug-これが私の意図ではなかったかのように質問を策定するための

let calendar = NSCalendar.currentCalendar() 
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
let order = calendar.compareDate(todaysdate, toDate: workoutdate, toUnitGranularity: .Day) 
+0

謝罪を。私は間違って+0000がタイムゾーンを示したと誤って想定していましたが、明らかにそうではありません。どうもありがとう。 – ABC

関連する問題