我的应用程序问题非常烦人。 让我们在名为“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(id_user,id_food,数量,日期)VALUES(1,1010,130.000000,'2011-12-21 01:20:09 m。')
但是sqlite3无法存储日期是这样的格式,结尾为“m”。串。由于WHERE子句中的空日期,用户无法查看任何记录。
那么“m。”来自?这是什么意思?我该如何解决这个问题?
答案 0 :(得分:3)
不使用NSDateFormatter会大大减慢您的应用。
您应该使用unix时间戳(1970)。
像这样sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);
检索:
[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];