Ich schreibe eine App, die Core-Daten verwendet, um meine Daten zu speichern. Darin enthalten ist ein Datumsfeld, von dem ich nur das Datum und nicht die Uhrzeit interessiert bin. Ich muss Datensätze basierend auf dem Datum (nicht Zeit) auswählen und so habe ich eine Kategorie auf NSDate erstellt, um ein Datum, normalisiert auf eine festgelegte Zeit wie folgt zurückzugeben:
%Vor%}
Ich benutze das dann, wenn ich Daten zum Core-Datenspeicher hinzufüge (ich habe einen Setter, der diese Methode verwendet, um den primitiven Datumswert festzulegen) und dann verwende ich diese Methode, um ein Datum zu erstellen, mit dem ich die Daten vergleichen kann wenn eine Abrufanforderung ausgeführt wird. In der Theorie sollte das immer funktionieren - also die Daten heraussuchen, nach denen ich suche.
Ich bin allerdings etwas nervös, da ich mir nicht ganz sicher bin, welchen Effekt die Änderung der Zeitzone oder des Gebiets hat. Wird es noch funktionieren?
Was als beste Vorgehensweise beim Speichern und Suchen eines Datums gilt, wenn Sie nicht an der Uhrzeit interessiert sind.
Prost.
BEARBEITEN
Nachdem ich die Diskussion empfohlen habe, denke ich, dass ich meinen Code wie folgt modifizieren sollte. Der Gedanke ist, dass, wenn ich sicherstelle, dass ich es an ein bestimmtes Kalendersystem und eine bestimmte Zeitzone (UTC) übergebe, die Daten immer gleich sein sollten, unabhängig davon, wo du bist, wenn du das Datum einstellst und das Datum liest. Alle Kommentare zu diesem neuen Code sind willkommen.
%Vor%}
Sie haben hier ein paar Probleme zu lösen. Zuerst, wie Sie notiert haben, Zeitzonen. Sie müssen sich auch über die Sommerzeit Gedanken machen, die das Konzept von "Mittag" ändern.
Sehen Sie sich diese Diskussion zu CocoaDev an, in der es einen Apple gibt Engineer gibt einige Antworten und diskutiert einige Best Practices.
Eine einfachere Lösung besteht darin, ein Prädikat zu verwenden, das nach Daten innerhalb eines bestimmten Bereichs sucht.
Verwenden Sie NSCalendarComponent, um ein Startdatum und ein Enddatum für Ihren "Tag" zu erstellen, und fügen Sie dann diese in das Prädikat ein.
%Vor%Das bietet maximale Flexibilität ohne zu viel Komplexität. Die Programmierung von Datum und Uhrzeit ist täuschend komplex. Sei bereit, etwas zu arbeiten.
Ich landete auch in einem Szenario, in dem ich ein NSDate
brauchte, um ein Datum zu vergleichen, ohne die Zeit zu berücksichtigen.
Ich hatte einen Filtermechanismus und als Teil der Benutzeroberfläche, wenn der Benutzer heute das Mindestdatum als Startdatum und das Enddatum wie heute wählte, würde ich "Alle Zeiträume" im Gegensatz zu einer Zeichenfolge im Format anzeigen:
1/5/2006 - 24/12/2009
Also musste ich das heutige Datum mit +date
von NSDate
nehmen und es mit dem Enddatum vergleichen. Dieses Enddatum stammt von UIDatePicker
ohne Zeitangabe, aber +date
hat das Datum und die Uhrzeit von jetzt zurückgegeben.
Also habe ich diese kurze handliche Methode geschrieben, sie erhält ein date-Objekt, benutzt NSDateComponents
und die NSCalendar
-Klasse, um Tag, Monat und Jahr zu extrahieren.
Diese 3 Parameter werden dann verwendet, um eine neue NSDate
mit NSDateFormatter's
- dateFromString:
-Methode zu erstellen, das Ergebnis ist ein NSDate
, das demselben "Datum" (im traditionellen menschlichen Konzept) entspricht wie der Parameter date
, aber ohne Zeit.
Ich hoffe, Sie können diese Funktion in Zukunft nutzen und genießen.