アプリで非常に厄介な問題が発生しています。"daily" という名前のテーブルに sqlite3 データベースと datetime 列があるとします。
- (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 Daily (id_user, id_food, quantity, date) VALUES (1, 1010, 130.000000, '2011-12-21 01:20:09 m.')
しかし、sqlite3 は、末尾が「m」のような形式の日付を格納できません。ストリング。また、WHERE 句の日付が null であるため、ユーザーはレコードを表示できません。
では、その「m」はどこにあるのでしょうか。から来た?どういう意味ですか?この問題を解決するにはどうすればよいですか?