Сохранение дат 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.
Ответ 5
Как получить столбец datetime в SQLite с Objective C