2012-04-07 3 views
2

У меня очень неприятная проблема с моим приложением. Давайте будем иметь базу данных sqlite3 и столбец datetime в таблице с именем «daily».NSDate и SQLite3

- (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); 

Когда я называю этот метод проходящее объект NSDate из UIDatePicker, некоторые пользователь сталкиваются странное поведение с NSDate, они зайдут это на своей консоли:

запрос: INSERT INTO ежедневно (id_user, id_food , количество, дата) VALUES (1, 1010, 130.000000, '2011-12-21 01:20:09 м.')

Но sqlite3 не может хранить дату, это такой формат, как с окончанием «м.» строка. И пользователи не могут просматривать записи из-за нулевой даты в предложении WHERE.

Итак, где это "м." происходит от? Что это значит? Как я могу исправить эту проблему?

ответ

3

не использует NSDateFormatter, это значительно замедлит ваше приложение.

Вы должны использовать временную метку unix (1970). Как это sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

ВОССТАНОВЛЕНИЕ:

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase]; 
+0

+1 Я не уверен, где 'm.' приходит от, но это, вероятно, будет лучше. Кроме того, вы можете явно установить локаль «NSDateFormatter», чтобы гарантировать, что он будет генерировать ту же строку стиля, независимо от того, что представляет собой текущий язык пользователя. –

+0

Мне нужно использовать NSDateFormatter из-за того, что я храню даты в формате даты sql. Я не могу изменить дизайн моей базы данных прямо сейчас. Я попытаюсь использовать локаль nsdateformatter. Я дам вам знать, если это сработает! – Progeny