2016-03-24 4 views
1

Im zwei NSDate von · Tag, dies zu tun (sowohl auf Zeitzone GMT) zu vergleichen versuchen:Vergleichen Sie zwei NSDate von · Tag in Swift ist falsch Ergebnisse geben

var order = NSCalendar.currentCalendar().compareDate(event.startDate!, toDate: cell.date!, 
        toUnitGranularity: .Day) 
        if (order == .OrderedSame) { 
          print(String(event.startDate!) + " == " + String(cell.date!)) 
         cell.events.append(event) 
         break 
        } 

Bei der Verwendung von 2016.03.08 21.43 : 53 +0000 und 2016-03-09 00:00:00 +0000 es sagt, sie sind bestelltSame, aber sie sind nicht, die Tage sind anders. Diese Funktion gibt aus:

2016-03-08 21:43:53 +0000 == 2016-03-09 00:00:00 +0000 

Kann mir bitte jemand helfen?

+2

Das Ergebnis ist wahrscheinlich in Bezug auf die Zeitzone Ihres Kalenders korrekt. Drucken Sie also die Zeitzone Ihres Kalenders aus oder ordnen Sie einen Kalender zu und legen Sie die Zeitzone fest, in der das Ergebnis "korrekt" sein soll. – DarkDust

+0

Sie denken, sie sind an verschiedenen Tagen. Aber NSDate gibt UTC aus und sie können sich an verschiedenen Daten in UTC befinden, aber in Ihrer Zeitzone sind sie am selben Datum. – gnasher729

Antwort

7

Diese beiden protokollierten Daten werden in der UTC-Zeitzone protokolliert. Aber wenn Ihre aktuelle Zeitzone westlich davon liegt, dann sind beide Daten am 8. März 2016 in Ihrer Zeitzone und der Vergleich wird in Ihrer Zeitzone durchgeführt. Oder, wenn Sie östlich davon um mindestens 2,5 Stunden leben, dann sind beide Daten der 9. März 2016.

Beispiel. Wenn Sie in den östlichen USA leben (GMT-4 derzeit aber GMT-5 am 8. März), dann sind diese beiden Daten tatsächlich 2016-03-08 16:43:53 -0500 und .

Beispiel. Wenn Sie in Osteuropa oder Asien leben (sagen wir GMT + 5), dann wären diese beiden Daten 2016-03-09 02:43:53 +0500 und 2016-03-09 05:00:00 +0500.

Wie Sie sehen können, sind diese am selben Tag, so dass der Vergleich korrekt ist.

Verwandte Themen