Сохранение дат до SQLite3 в приложении для iPhone - PullRequest
16 голосов
/ 30 октября 2008

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

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

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

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

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

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

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

Ответы [ 5 ]

21 голосов
/ 30 октября 2008

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

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

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

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
9 голосов
/ 30 октября 2008

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

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

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

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

8 голосов
/ 31 октября 2008

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

Гораздо удобнее для чтения / взлома, чем временные интервалы.

2 голосов
/ 30 октября 2008

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

0 голосов
/ 11 ноября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...