Как значения DATETIME работают в SQLite?

67

Im создает приложения для Android и вам нужно сохранить дату и время записи создания. Каков наилучший способ сделать это? Мне нужно будет сравнить его позже. Например, в моих приложениях я покажу, что вся запись создается между датой A до даты B.

Теги:
datetime

4 ответа

55

SQlite не имеет определенного типа datetime. Вы можете использовать типы TEXT, REAL или INTEGER, в зависимости от ваших потребностей.

Прямо от DOCS

SQLite не имеет класса хранения, зарезервированного для хранения дат и/или времени. Вместо этого встроенные функции даты и времени SQLite способны хранить даты и время как значения TEXT, REAL или INTEGER:

  • ТЕКСТ как строки ISO8601 ( "ГГГГ-ММ-ДД ЧЧ: ММ: SS.SSS" ).
  • REAL, как число юлианских дней, количество дней с полудня в Гринвиче 24 ноября 4714 г. B.C. согласно пролептическому григорианскому календарю.
  • INTEGER as Unix Time, количество секунд с 1970-01-01 00:00:00 UTC.

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

Встроенные функции даты и времени SQLite могут быть найдены здесь.

  • 9
    Важно отметить - все методы хранения дат используют форматы, которые можно сравнивать с помощью стандартных операторов =, <,> и BETWEEN.
  • 1
    «SQLite не имеет класса хранения, выделенного для хранения дат и / или времени» - за исключением того, что у него есть типы DATE и DATETIME, которые никогда не упоминаются в документации
Показать ещё 1 комментарий
15

В SQLite отсутствует класс хранения, зарезервированный для хранения дат и/или раз. Вместо этого встроенные функции даты и времени SQLite могут хранить даты и время как TEXT, REAL или INTEGER значения:

ТЕКСТ как строки ISO8601 ( "ГГГГ-ММ-ДД ЧЧ: ММ: SS.SSS" ). РЕАЛЬНО как Джулиан число дней, число дней с полудня в Гринвиче в ноябре 24, 4714. B.C. согласно пролептическому григорианскому календарю. INTEGER как Unix Time, количество секунд с 1970-01-01 00:00:00 UTC. Приложения могут выбирать даты и время в любом из этих форматы и свободно конвертировать между форматами с использованием встроенной даты и функции времени.

Сказав это, я бы использовал INTEGER и сохранил секунды со времен Unix (1970-01-01 00:00:00 UTC).

  • 1
    Я тоже предпочитаю это. Стандартные классы, связанные с датой и временем, так или иначе поддерживаются внутренними значениями long, и сравнивать long довольно просто.
  • 0
    @dtmilano Почему вы предпочитаете INTEGER вместо String?
Показать ещё 2 комментария
5

Для практически всех вопросов даты и времени я предпочитаю упрощать вещи, очень, очень просто... До секунд хранится в целых числах.

Целые числа всегда будут поддерживаться как целые числа в базах данных, плоских файлах и т.д. Вы делаете небольшую математику и применяете ее к другому типу, и вы можете форматировать дату в любом случае.

Выполняя это так, вам не нужно беспокоиться, когда [вставить текущую любимую базу данных здесь] заменяется на [будущую любимую базу данных], которая по совпадению не использовала формат даты, который вы выбрали сегодня.

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

4

Сохраните его в поле типа long. См. Date.getTime() и new Date(long)

  • 0
    как я могу сравнить это? Можете ли вы дать мне образец запроса ..: D
  • 0
    Посмотрите на Joda Time для сравнений в коде ( joda-time.sourceforge.net ) и используйте простое длинное сравнение в SQL (например, числовое сравнение).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню