2009-06-02 7 views
4

Gibt es eine Möglichkeit in SQLite automatisch einen Zeitstempel in der Tabelle zu speichern, wenn ein Datensatz erstellt wurde, den ich dann als NSDate in meiner Anwendung speichern kann?sqlite datetime datentyp mit iphone NSdate?

Oder sollte ich stattdessen das NSdate-Objekt mit der aktuellen Uhrzeit in meiner iPhone-App erstellen und dann in die Datenbank einfügen. Wenn ja? In welcher Spalte sollte der Datentyp für die Zeit stehen? ein DATETIME?

Antwort

8

Es gibt keinen TIMESTAMP Datentyp, den Sie in SQLite verwenden können, also müssen Sie die Zeit manuell eingeben, wenn Sie Ihre INSERT machen. Ich verwende den INTEGER Datentyp in der Datenbank, und konvertieren meine NSDate als solche:

sqlite3_bind_double(insert_statement, 1, [myDate timeIntervalSince1970]); 

Und es aus dem DB zurück zu bekommen:

myDate = [NSDate dateWithTimeIntervalSince1970:sqlite3_column_double(select_statement, 1)]; 
+0

Ich fürchte, dies falsch ist, gibt es für Datum und Uhrzeit Datentyp in SQLite. – Thiru

21

Was ich tue, ist current_timestamp die Nutzung SQLite (die aussieht etwas wie das: 2009-06-16 12:11:24). Um dies zu tun setzen nur den Zeilentyp Ihrer qslite Tabelle

Data type: "DATETIME" 
Allow null: NO 
Default value: CURRENT_TIMESTAMP 

Dann eine SQL-Abfrage wie folgt verwenden:

@"INSERT INTO 'scores' ('one', 'two', 'three') VALUES ('%d', '%d', '%d')" 

das Datum zu ignorieren, so dass es automatisch den aktuellen Zeitwert erhalten.

Dann dies einen NSDate konvertieren Sie einen NSDateFormatter wie diese verwenden:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //this is the sqlite's format 
NSDate *date = [formatter dateFromString:score.datetime]; 

und Sie haben jetzt dieses Datum als NSDate Objekt. Nur nicht vergessen, die NSDateFormatter veröffentlichen wir :) zugewiesen

0

Ich mag die SQLite julianday() Funktion nutzen, wie:

insert into foo(currentDate) values (julianday('now')); 

Dies würde einen Gleitkommawert in foo.currentDate werden eingefügt.

Sie könnten auch einige Details dieser Frage/Antwort nützlich finden.

How get a datetime column in SQLite with Objective C