NSDate和SQLite3

时间:2012-04-07 15:04:25

标签: ios sqlite nsdate

我的应用程序问题非常烦人。 让我们在名为“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。”来自?这是什么意思?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

不使用NSDateFormatter会大大减慢您的应用。

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

检索:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];