Я пытаюсь создать красивую небольшую базу данных для запуска в мобильном приложении (Windows Mobile 5, если вам интересно).
В документации SQLite , Дата иТип данных времени определяется следующим образом:
1.2 Тип данных даты и времени
SQLite не имеет выделенного класса хранения для хранения дат и / или времени.Вместо этого встроенные функции даты и времени в SQLite способны сохранять даты и время в виде значений TEXT, REAL или INTEGER:
- TEXT в виде строк ISO8601 ("YYYY-MM-DD HH:MM: SS.SSS ").
- REAL в виде чисел в юлианских днях, количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. в соответствии с грипорианским календарём с пролеплением.
- INTEGER в UnixВремя, количество секунд с 1970-01-01 00:00:00 UTC.
Приложения могут сохранять даты и время в любом из этих форматов и свободно конвертировать между форматами, используя встроенныев функциях даты и времени.
Итак, сохранение моего значения DateTime
в виде REAL
(с плавающей запятой) или INTEGER
того же размера.
Как насчетTEXT
формат?Выше 23 символа в тексте YYYY-MM-DD HH:MM:SS.SSS
. Это 8 байтов на символ? Если так, то это ОГРОМНАЯ трата места для хранения в текстовом формате (что я сейчас и делаю).
А как насчет формата REAL
?Буду ли я определять базовую дату от 24 ноября 4714 года до нашей эры?(Я даже не уверен, что Visual Studio 2008 позволит мне сделать это. Я никогда не пробовал.) Затем получите TimeSpan
между базовой датой и желаемой датой, извлекитеколичество дней, и сохранить это?
// is this how to declare this date?
private static readonly DateTime nov24_4714bc = new DateTime(-4714, 11, 24);
public static double GetRealDate(DateTime dateTime) {
// FYI: subtracting dates in .NET returns a time span object
return (dateTime - nov24_4714bc).TotalDays;
}
А как насчет формата INTEGER
?Если бы я определил базовую дату из 1970-01-01 00:00:00 UTC
(пожалуйста, скажите мне, как это сделать!), Затем получил бы TimeSpan
между базовой датой и моей входной датой, извлеките числосекунд, и сохранить это?
// is this a UTC date?
private static readonly DateTime utc1970_01_01 = new DateTime(1970, 1, 1);
public static double GetIntDate(DateTime dateTime) {
// FYI: subtracting dates in .NET returns a time span object
return (dateTime - nov24_4714bc).TotalSeconds;
}
Любая помощь с этим?Я немного запутался в нескольких моментах.