У меня есть сомнения, может ли NSDate быть напрямую сохранен или прочитан из базы данных с использованием FMDatabase или нет.
Согласно моему исследованию, FMDatabase считывает дату из записи, ожидая, что кортеж будет двойным значением.FMDatabase преобразует это двойное значение к дате в этом методе:
- (NSDate*) dateForColumn:(NSString*)columnName; {
int columnIdx = [self columnIndexForName:columnName];
if (columnIdx == -1) {
return nil;
}
return [NSDate dateWithTimeIntervalSince1970:[self doubleForColumn:columnName]];
}
Основная проблема с этим подходом состоит в том, что человеку, который вручную вводит данные в базу данных, будет трудно, чтобы его могли понятьFMDatabase в коде.Поэтому кто-то не может просто ввести дату в двойном значении в графическом интерфейсе.Один из подходов состоит в том, чтобы использовать одну из этих функций
date(timestring, modifier, modifier, ...)
time(timestring, modifier, modifier, ...)
datetime(timestring, modifier, modifier, ...)
julianday(timestring, modifier, modifier, ...)
strftime(format, timestring, modifier, modifier, ...)
Но здесь снова стоит каждый раз запускать запрос на ввод записи, используя операцию вставки, подобную этой:
Compute the current date.
SELECT date('now');
Compute the last day of the current month.
SELECT date('now','start of month','+1 month','-1 day');
Я бы хотел, чтобы дата сохранялась в базе данных в в следующем формате :
TEXT as ISO8601 strings ("YYYY-MM-DD")
И сохраняла бы ее в формате даты в базе данных, чтобы я могла:
- Использование средства сравнения дат в запросах.
- Сделать FMDatabase понятным для чтения и записи этого формата даты.
Есть ли прямой путь к FMDatabaseможет взаимодействовать с таким форматом даты?Или это ограничение FMDatabase, и мне придется расширить класс FMDatabase для обработки чтения и записи NSDate в формате даты sqlite?
Спасибо
Редактировать: Один из авторов / модераторов FMDatabase должен сказать это об этом: http://code.google.com/p/flycode/issues/detail?id=16#c1