2016-07-15 7 views
0

Also versuche ich eine Reihe von Daten aus meiner Datenbank (Strings, die ich in NSdates umwandele) mit dem aktuellen Datum zu vergleichen.Vergleicht man zwei NSDates gibt falsch positive Ergebnisse zurück

Wenn ich den Code für ein Beispiel-Datum ausführen: 2016-07-17 12:28:51 +0000 gibt es falsch positive Ergebnisse für den Vortag (gestern) zurück.

Console Ausgabe:

Optional(2016-07-15 22:00:00 +0000) 
DAY IN THE PAST 
Optional(2016-07-15 22:00:00 +0000) 
DAY IN THE PAST 
Optional(2016-07-16 22:00:00 +0000) 
SAME DAY 
Optional(2016-07-16 22:00:00 +0000) 
SAME DAY 
Optional(2016-07-16 22:00:00 +0000) 
SAME DAY 

Ich sehe nicht, was ich falsch hier tun. Code:

let dateToday = NSDate() // example: 2016-07-17 12:28:51 +0000 
print(dateToday) 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd" 
     let openDB = realm.objects(Article) 
     for item in openDB { 
      let getItem = item.toDate 
      let date = dateFormatter.dateFromString(getItem!) 

      let order = NSCalendar.currentCalendar().compareDate(dateToday, toDate: date!, 
       toUnitGranularity: .Day) 
      print(date) //example 2016-07-17 22:00:00 +0000 
      switch order { 
      case .OrderedDescending: 
       print("DAY IN THE PAST") 
      case .OrderedAscending: 
       print("FUTURE DATE") 
      case .OrderedSame: 
       print("SAME DAY") 
      } 

Bitte beachten Sie, dass ich muss nur die Termine selbst überprüfen, ich kümmere mich nicht um die Zeit (Stunden, Minuten).

+0

Nicht sicher, ob das wichtig ist, aber ich werde nur diese Info hinzufügen: Im Allgemeinen habe ich das Datum meines Geräts auf den 17. zum Testen geändert. Vielleicht verursacht das einige Probleme mit dem Code? – SoundShock

+2

Sind Sie in der Zeitzone GMT + 2? Dann ist "2016-07-16 22:00:00 + 0000" "2016-07-17 00:00:00 + 0200" entsprechend Ihrer Zeitzone und am selben Tag wie das angegebene Datum. –

+0

@MartinR Ich glaube, ich bin tatsächlich in einer GMT +02: 00 Zeit (Belgien), da es Sommerzeit ist. Also ist es egal, dass mein Code die Stunden und Minuten ignoriert? wegen der 22 und meiner 2+ GMT ändert es das Datum? Wie kann ich es manuell beheben? Ich habe nie die 22:00:00 in meinem Code hinzugefügt, es scheint nur zu passieren, wenn die Konvertierung zu dateFormatter.dateFormat = "yyyy-MM-dd" – SoundShock

Antwort

0

Sie müssen entscheiden, welches Ergebnis Sie benötigen, und dann für das Codieren.

NSDate Objekte kodieren Momente in der Zeit, überall auf dem Planeten. Intern verwenden sie GMT als ihre Zeitbasis, aber das ist ein Implementierungsdetail.

Wenn Sie zwei Daten vergleichen möchten, um zu sehen, ob sie am selben Tag fallen, müssen Sie die Zeitzone für den Vergleich angeben. Wenn ich 11:02 PM und 12:02 PM in Ihrer Zeitzone GMT + 2 vergleiche, fallen diese 2 Daten auf verschiedene Tage.

Jedoch sind diese Zeiten 9:02 PM und 10:02 PM in GMT und fallen am selben Tag in GMT.

Wenn Sie wissen möchten, ob die Daten das gleiche Datum in GMT sind, dann müssen Sie ein Gregorianisches Kalenderobjekt erstellen und seine Zeitzone auf GMT einstellen.