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?
Antwort
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.
Vielen Dank für eine gute Erklärung. Ich schätze, ich werde dafür mehrere Eigenschaften verwenden. – Randex
- 1. Was ist der richtige Weg, um eine NSURL in Core Data zu speichern?
- 2. Was ist der richtige Weg um umzuleiten?
- 3. Was ist der richtige Weg, um diese Informationen zu erhalten?
- 4. Was ist der richtige Weg, um in Rails zu zählen?
- 5. Was ist der beste Weg ein Zeitintervall in PHP hinzuzufügen?
- 6. Was ist der richtige Weg, um Daten in `<a>` Anker-Tags zu speichern?
- 7. Was ist der richtige Weg, um FB.Event.subscribe zu behandeln?
- 8. Was ist der aktuelle richtige Weg, um Edelsteine zu veröffentlichen?
- 9. Was ist der richtige Weg, um nach False zu suchen?
- 10. Was ist der richtige Weg, um Berechtigungen zu adressieren?
- 11. Was ist der richtige Weg, um Montageversion zu behandeln?
- 12. Was ist der richtige Weg, um den "in" -Operator zu verwenden, um ein Histogramm zu erstellen?
- 13. Was ist der richtige Weg, Testbereiche um Ausnahmen zu gruppieren
- 14. Was ist der richtige Weg, um scala.io.Source zu verwenden?
- 15. Was ist der richtige Weg, um Controller-Aktionen zu erstellen?
- 16. Was ist der richtige Weg, um eine QList zu initialisieren?
- 17. Was ist der richtige Weg, um eine ListBox zu laden?
- 18. Was ist der richtige Weg um Transienten zu markieren?
- 19. Was ist der richtige Weg, um den Fall zu vergleichen?
- 20. Was ist der richtige Weg, um EF-Warnungen zu unterdrücken?
- 21. Quarz 2d/Core Graphics: Was ist der richtige Weg, um etwas Text zu zeichnen?
- 22. Was ist der richtige Weg, um Benutzerdaten zu speichern und dann mit Typhoon zu injizieren?
- 23. Was ist der 'richtige' Weg, um einen nativen Zeiger in einem Java-Objekt zu speichern?
- 24. Was ist der richtige Weg, um eine globale Verbindung in Clojure zu speichern?
- 25. Was ist der richtige Weg, um einen Dateinamen in XML zu speichern?
- 26. Was ist der beste/richtige Weg, um Daten in MySQL zu speichern?
- 27. Ist das der richtige Weg, um ein iPad zu erkennen?
- 28. Was ist der richtige Weg, um neue Inhalte in ein Kendo-Fenster zu laden?
- 29. Was ist der richtige Weg, um log4j in JSP-Seiten
- 30. Was ist der richtige Weg, um ein React-Komponentenmodul in NPM ohne externe Abhängigkeiten zu veröffentlichen?
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. –
@MartinR Ja, vergaß das zu erwähnen. Intervalle in meiner App können entweder ein paar Minuten oder mehrere Monate sein – Randex