Ich habe eine sqlite3-Tabelle, die ich einem Objekt in objective-C zuordnen möchte. Ein Attribut der Tabelle ist 'completed_at', das als DATETIME gespeichert wird.
Ich möchte eine Eigenschaft für meine objective-C-Klasse (die von NSObject erbt) erstellen, die gut auf das Attribut 'completed_at' abgebildet wird.
Objective-C hat einen NSDate-Typ, aber ich bin mir nicht sicher, ob das direkt zugeordnet wird?
Ich teile hier nur die wichtigsten Dinge bezüglich der Datumsformatierung zum Speichern und Abrufen der Daten für die Präsentation. Wenn Sie ein Problem mit diesem Code-Snippet haben, werde ich den vollständigen Code freigeben, den ich für mein Projekt verwendet habe.
Wenn Sie Ihre Daten speichern, binden Sie Ihren Datumswert wie folgt in die SQL-Anweisung:
%Vor%und wenn Sie Daten abrufen, müssen Sie diesen Code schreiben:
%Vor%Jetzt haben Sie eine Variable myDate of NSDate type, die Sie auf Ihre Art rendern können:
%Vor%Sie müssen sich an drei Dinge erinnern:
Format:
%Vor%Ich habe keine Erfahrung mit Objective-C, aber ich fand Apples NSDate-Klassenreferenz mit einer Google-Suche. Mit den Informationen auf der verlinkten Seite sollten Sie herausfinden können, wie man 32-Bit-Epochen in Objective-C manipuliert, und das würde in SQLite gut funktionieren. Ich würde wahrscheinlich die completed_at Spalte als Typ INTEGER für 32-Bit-Zeiten erstellen.
SQLite bevorzugt julianische Daten, die Floats sind. Ich habe keine Dokumentation gefunden, die erklärt, wie man die NSDate-Klasse dazu zwingen könnte, mit Julians zu arbeiten.
timeIntervalSince1970 sieht sehr interessant aus.
Der Formatierer ist wichtig, wenn Sie versuchen, die Präsentation zu bewirken, aber wenn Sie if für den internen Speicher verwenden, definieren Sie eine Zeichenfolge, die die Fähigkeit der DB-Engine zur Verwendung des Werts für Berechnung, Vergleich, Sortierung usw. verhindern kann. Auch wenn Sie verschiedene Clients haben, die den Datumswert in die DB einfügen, müssten Sie Konvertierungsfunktionen überall schreiben. Ich habe Folgendes verwendet und es hat wie erwartet funktioniert (die Spalte des Schemas ist als DATETIME definiert):
%Vor%Ich habe hier in der zentralen Zeitzone in die SQLITE3 db mit dem Firefox Add-on als "4/12/2010" eingefügt. Anzeige des Wertes von 'dateExpires' im XCode-Debugger angezeigt als:
%Vor%Sicher genug, das ist die richtige Zeit.
Zum Einfügen in die SQLITE DB wird auch der Wert [NSDate date]
Tags und Links objective-c sqlite