我的应用遇到了一个非常烦人的问题。 让我们在名为“daily”的表中有一个 sqlite3 数据库和一个 datetime 列。
- (BOOL)eatQuantityNSNumber *)quantity dateNSDate *)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 子句中的日期为空,用户无法查看任何记录。
所以那个“m”在哪里。来自?这是什么意思?我该如何解决这个问题?
不要使用 NSDateFormatter 它会大大降低您的应用程序的速度。
您应该使用 unix 时间戳 (1970)。
像这样 sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);
检索:
[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
关于ios - NSDate 和 SQLite3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055540/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |