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

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

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

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

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

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

Любая помощь будет высоко оценена.

Спасибо заранее.

Ответы

Ответ 1

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

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

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

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];

Ответ 2

Храните как типичное время C (например, значение time_t/int, возвращаемое значением времени()) в столбце UNSIGNED INT. Преобразовать как drewh с NSDate:

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

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

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

Ответ 3

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

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

Ответ 4

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