Сохранение дат в SQLite3 в приложении iPhone

Я разрабатываю приложение для iPhone, которое сохраняет данные в базе данных SQLite3.

Для каждой строки, на которой я настаиваю, я хочу включить «дату создания» и «дату последнего изменения».

У меня вопрос: каков рекомендуемый подход для хранения этой информации в таблице?

В моем приложении свойства представлены как NSDate, но я не уверен, как представить эту информацию в моей таблице.

Похоже, что SQLite3 предоставляет тип DATETIME, но не имеет собственного понимания того, как анализировать эту информацию.

Любая помощь приветствуется.

Заранее спасибо.


person lucasweb    schedule 30.10.2008    source источник


Ответы (5)


Я обычно использую двойное, что-то вроде:

sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

где dateObject - это NSDate *. Затем при получении данных из БД используйте

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
person drewh    schedule 30.10.2008
comment
Я пытаюсь получить доступ с помощью FMDatabase, но я ввожу записи с помощью графического интерфейса, каждый раз, когда я не получаю никаких записей. пожалуйста, проверьте мой вопрос и предложите: stackoverflow.com/questions/8772601/ - person Raj Pawan Gumdal; 08.01.2012

Сохраните как типичное значение C-time (например, значение time_t / int, возвращаемое функцией time ()) в столбце UNSIGNED INT. Преобразуйте, как сказал drewh с NSDate:

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

За исключением сохранения в виде целого числа, если вам не нужна субсекундная детализация (что, как правило, для созданного / последнего изменения является излишним). Беззнаковые целые числа намного меньше и их легче обрабатывать, чем двойные. Хотя это может больше не иметь значения для большинства настольных и веб-приложений, на iPhone это определенно помогает. Любая мелочь помогает.

Одно из побочных преимуществ C-time, которое большинство людей не осознают, заключается в том, что они не зависят от часовых поясов. Если вам когда-нибудь понадобится поддержка нескольких часовых поясов, это пригодится.

person Marco    schedule 30.10.2008

Я конвертирую в / из строк ISO8601: http://en.wikipedia.org/wiki/ISO_8601

Намного более читабельный / взломанный, чем временные интервалы.

person schwa    schedule 30.10.2008
comment
То же самое. Конечно, это немного больше места, но гораздо приятнее читать во время сеанса отладки. - person bwinton; 31.10.2008
comment
Как вы выполняете поиск по диапазону дат с помощью NSPredicate? - person John Wright; 01.04.2010

Согласно документации, типа данных DATETIME нет! Я использую реальный тип данных и конвертирую NSDate в реальный с помощью метода timeIntervalSinceReferenceDate.

person Stephen Darlington    schedule 30.10.2008