Вопросы | sqlite

Хранение календарного дня в базе данных sqlite

Вопрос

jblocksom | 2530 просмотров | рейтинг: 0

Мне нужно хранить элементы с календарной датой (просто день, без времени) в базе данных sqlite. Как лучше всего представить дату в столбце? Юлианские дни и секунды юникса приходят на ум как разумные альтернативы. Если я пойду с единицей, кроме дней, в какое время это должно быть? Обновление: я знаю о ISO8601 и фактически использовал его для хранения даты в виде строки в формате YYYY-MM-DD для прототипа. Но для различной арифметики я должен преобразовать его в некоторое число внутри, поэтому я бы предпочел сохранить число и просто преобразовать его в строку для отображения. В каких единицах должно быть это число, с каким источником, и если эти единицы более точны, чем дни, какое время суток следует использовать?



Ответы

Aaron Fischer

+ 4 -
Если вы планируете передавать дату внешнему инструменту или библиотеке, вы должны использовать любой формат, который она ожидает. Время Unix, кажется, является лингвистическим языком цифровой горографии, так что это хороший выбор по умолчанию, если внешние обстоятельства не делают выбор за вас. ISO 8601 может представлять интерес. Редактировать:
  Но для различной арифметики я должен преобразовать его в некоторое число внутри, поэтому я бы предпочел сохранить число и просто преобразовать его в строку для отображения.
Ах, это имеет смысл. Если в вашей среде (.NET? Python? C ++?) Есть инструменты для обработки времени, было бы лучше использовать их собственный модуль и эпоху. Нет причин переписывать все эти функции манипулирования датами; они хитрее, чем выглядят. В противном случае я бы использовал дни в местном (григорианском?) Календаре с разумной эпохи для вашего приложения. Будьте щедрыми, вам не нужна обратная ошибка Y2K, когда вам вдруг понадобится обработать дату раньше, чем вы ожидали. Время дня - дело вкуса. Полночь кажется самым чистым выбором (все нули в полях часа, минуты, секунды), но поскольку она никогда не достигает пользователя, это не имеет практических последствий. На самом деле это было бы хорошее место для пасхального яйца.  


skymt

+ 0 -
Если вы хотите охватить свои базы, убедитесь, что вы храните дату в utc и выбираете стандарт ISO. Этот подход требует минимальных усилий и защитит ваш код от будущих проблем Interop. Я согласен с @skymt. ISO 8601 - хороший выбор.


Теги

sqlite | date | time | calendar | iso8601