Gibt die Anzahl der Tage zwischen zwei NSDate-Daten in einer bestimmten Zeitzone an

8

Ich habe die Codes gefunden, um den Unterschied zwischen zwei Tagen zu berechnen hier .
Ich schreibe eine Methode:

%Vor%

Diese Methode hat ein Problem: Sie kann die Zeitzone nicht berücksichtigen. Auch ich füge eine Zeile wie folgt hinzu:

%Vor%

Mein Testcode ist wie folgt:

%Vor%

Das Ergebnis ist:

  

Days Unterschied zwischen 2012-09-03 23:00:00 und 2012-09-04 01:00:00 ist: 0 Tage

Ich möchte 1 Tag als Ergebnis der Anzahl der Mitternachten zwischen den beiden Daten erhalten. Meine Zeitzone ist GMT +8. Aber diese Berechnung basiert auf GMT, also bekomme ich die falsche Nummer. Gibt es trotzdem eine Lösung für dieses Problem? Danke.

Scott Lemmon Methode kann mein Problem lösen. Ich schreibe meinen Code so um:

%Vor%     
Vigor 04.09.2012, 06:32
quelle

2 Antworten

5

Wenn der Zeitzonen-Offset nicht funktioniert, können Sie ihn stattdessen manuell hinzufügen oder subtrahieren.

In Ihrem Fall NSDate *newDate = [oldDate dateByAddingTimeInterval:(-8 * 60 * 60)]; , um Ihre +8 Stunden abzuziehen.

Oder wenn Sie den GMT-Offset auch automatisch finden wollen, dann wäre es einfach NSDate *newDate = [oldDate dateByAddingTimeInterval:(-[[NSTimeZone localTimeZone] secondsFromGMT])

Ein anderer Gedanke: Eine vielleicht einfachere Lösung wäre, die Zeitinformation ganz zu ignorieren. Stellen Sie es einfach auf die gleiche Zahl für beide Daten ein, und solange die Daten aus derselben Zeitzone stammen, erhalten Sie immer die richtige Anzahl von Nächten dazwischen, unabhängig von der GMT-Verschiebung.

    
Scott Lemmon 04.09.2012, 07:01
quelle
3

Was Sie wirklich wollen, ist die Methode NSDate timeIntervalSinceDate: , und nehmen Sie dieses Ergebnis und wenn es mehr als 0, aber weniger als 86400 (die Anzahl der Sekunden an einem Tag), das ist ein Tag . Andernfalls teilen Sie Ihr Ergebnis durch 86400 und Sie erhalten die Anzahl der Tage.

Wie Sie Ihren Code derzeit haben, gibt es nur zwei Stunden zwischen den beiden Tagen und deshalb sehen Sie ein Ergebnis von 0 und nicht eins.

Bearbeiten - und um festzustellen, ob Mitternacht passiert ist, probieren wir diese Funktion aus, die ich gerade oben geschrieben habe:

%Vor%

was ich ablehne Dave Delongs Antwort auf diese Frage . Keine Garantie, dass mein Code funktioniert (ich habe es nicht getestet), aber ich denke, das Konzept ist solide.

    
Michael Dautermann 04.09.2012 06:38
quelle