2

我的应用程序遇到了一个非常烦人的问题。让我们在名为“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 子句中的日期为空,用户无法查看任何记录。

所以那个“m”在哪里。来自?这是什么意思?我该如何解决这个问题?

4

1 回答 1

3

不要使用 NSDateFormatter 它会大大降低你的应用程序的速度。

您应该使用 unix 时间戳 (1970)。像这样sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

检索:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
于 2012-04-07T15:11:31.960 回答