2016-07-10 6 views
2

Ich muss ein Zeitintervall in einer App-Datenbank speichern, die gelegentlich zu NSDate hinzugefügt wird. Problem ist, ich weiß nicht, welchen Datentyp ich dafür wählen soll. Einige Leute empfehlen, NSTimeInterval zu speichern, aber wird es zu Fehleinschätzungen führen, wenn sich die Zeitzone des Benutzers ändert? Vielleicht ist es besser, NSDateComponents (als "transformable" -Datentyp) zu speichern oder gibt es eine andere bessere Möglichkeit, es zu tun?Was ist der richtige Weg, um ein Zeitintervall in Core Data zu speichern?

+0

Es kommt darauf an. Ein Zeitintervall von 10 Sekunden, 20 Minuten oder 3 Stunden beträgt 10 Sekunden, 20 * 60 Sekunden oder 3 * 3600 Sekunden, unabhängig von der Zeitzone oder dem aktuellen Datum, und Sie können es als NSTimeInterval speichern. - Ein Zeitintervall von "1 Tag" kann 23, 24 oder 25 Stunden betragen. Ein Zeitintervall von "1 Monat" kann 28, 29, 30 oder 31 Tage (im Gregorianischen Kalender) betragen. –

+0

@MartinR Ja, vergaß das zu erwähnen. Intervalle in meiner App können entweder ein paar Minuten oder mehrere Monate sein – Randex

Antwort

6

Eine Minute ist 60 Sekunden, und eine Stunde ist 3600 Sekunden, egal was das aktuelle Datum, die Zeitzone oder der Kalender ist. Wenn Sie die Dauer "24 Stunden" speichern möchten, können Sie diese als Zeitintervall mit dem Wert 24 * 3600 speichern.

Alle größeren Einheiten, mit Tagen beginnen, muss die aktuelle Datum, Zeitzone und Kalender nach interpretiert werden. Die Dauer "ein Tag" kann23, 24 oder 25 Stunden in Regionen mit Sommerzeit sein. Insbesondere haben "24 Stunden" und "1 Tag" eine andere Bedeutung. Die Dauer "1 Monat" kann von 28 bis 31 Tagen im Gregorianischen Kalender sein, und "1 Jahr" kann 365 oder 366 Tage sein. Andere Kalender können andere "Eigenheiten" haben.

Daher müssen alle Dauern mit "Tag" oder größeren Einheiten als Datumskomponenten gespeichert werden. Transforming to NSDateComponents ist eine Möglichkeit, Alternativ können Sie mehrere Eigenschaften "durationDays", "durationMonths" usw. zu Ihrer Core Data-Entität hinzufügen. Dies hat den Vorteil , dass auf die Werte in Abrufanforderungen verwiesen werden kann oder Deskriptoren sortieren können.

+0

Vielen Dank für eine gute Erklärung. Ich schätze, ich werde dafür mehrere Eigenschaften verwenden. – Randex

Verwandte Themen