2012-04-07 8 views
2

私のアプリでは非常に迷惑な問題があります。 "daily"という名前のテーブルにsqlite3データベースとdatetime列があります。私は、一部のユーザーはNSDateとの奇妙な行動に直面しているUIDatePickerからNSDateオブジェクトを渡してこのメ​​ソッドを呼び出すと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); 

、彼らは、コンソール上でこれをログ:

クエリ:(id_user、id_food毎日。INSERT INTO 0110200000、 '2011-12-21 01:20:09 m。')

しかし、sqlite3は日付を保存できません。そのような形式のエンディング"m"文字列。また、WHERE句の日付が空であるため、ユーザーはレコードを表示できません。

だからどこの "m。"から来た?どういう意味ですか?この問題を解決するにはどうすればよいですか?

答えて

3

NSDateFormatterを使用しないと、アプリの処理速度が大幅に低下します。

UNIXタイムスタンプ(1970)を使用する必要があります。 検索

sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);このように:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase]; 
+0

+1私は 'm.'がどこから来ているわからないんだけど、これはおそらく良いだろう。あるいは、NSDateFormatterのロケールを明示的に設定して、ユーザーの現在のロケールに関係なく同じスタイルの文字列を生成できるようにすることもできます。 –

+0

SQLの日付形式で日付を格納するため、NSDateFormatterを使用する必要があります。今私のデータベースの設計を変更することはできません。 nsdateformatterのロケールを使って試してみましょう。私はそれが動作するかどうかをお知らせします! – Progeny