2012-04-07 63 views
2

我有一個非常惱人的問題,我的應用程序。 讓我們在名爲「daily」的表中有一個sqlite3數據庫和一個datetime列。NSDate和SQLite3

- (BOOL)eatQuantity:(NSNumber *)quantity date:(NSDate *)date 
{ 
    User *usr = [User loadCurrentUser]; 

    BOOL ret; 
    sqlite3 *db; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
    NSString *strDate = [dateFormatter stringFromDate:date]; 
    [dateFormatter release]; 

    NSString *query = [NSString stringWithFormat:@"INSERT INTO daily (id_user, id_food, quantity, date) VALUES (%d, %d, %f, '%@')", usr.idPk.intValue, self.idPk.intValue, quantity.floatValue, strDate]; 
    NSLog(@"Query: %@", query); 

當我把這個方法從一個的UIDatePicker傳遞的NSDate對象,一些用戶正面臨着的NSDate一個奇怪的行爲,他們登錄此其控制檯上:

查詢:INSERT INTO每天(id_user,id_food ,數量,日期)VALUES(1,1010,130.000000,'2011-12-21 01:20:09 m。')

但是sqlite3無法存儲日期是這樣一種格式, 「M」。串。由於WHERE子句中的空日期,用戶無法查看任何記錄。

那麼,「米」來自?這是什麼意思?我該如何解決這個問題?

回答

3

不使用NSDateFormatter會大幅減慢您的應用程序。

您應該使用unix timestamp(1970)。 像這樣sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

檢索:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase]; 
+0

+1我不知道在哪裏了'm.'是從哪裏來的,但是這可能會更好。或者,你可以明確地設置'NSDateFormatter'的語言環境來保證它會生成相同的樣式字符串,而不管用戶當前的語言環境是什麼。 – 2012-04-07 15:21:29

+0

我需要使用NSDateFormatter,因爲我以sql的日期格式存儲日期。我現在無法改變我的數據庫的設計。我會嘗試使用nsdateformatter的語言環境。我會讓你知道它是否有效! – Progeny 2012-04-08 12:27:41