Я пытаюсь создать красивую небольшую базу данных для работы в мобильном приложении (Windows Mobile 5, если вам интересно).SQLite Дата и время Datatype
В SQLite Documentation, дата и время Datatype определяется следующим образом:
1,2 Дата и время Datatype
SQLite не имеет класса памяти, отведенные для хранения дат и/или раз. Вместо этого, встроенный Функции даты и времени в SQLite способны хранить даты и времени, как TEXT, REAL или INTEGER значения:
- TEXT как строки ISO8601 ("YYYY-MM-DD HH: MM : СС.ссс ").
- REAL как число юлианских дней, количество дней с полудня в Гринвиче 24 ноября 4714 г. B.C. по рецепту Григорианский календарь.
- INTEGER as Unix Время, количество секунд начиная с 1970-01-01 00:00:00 UTC.
Приложение может выбрать для хранения даты и времени в любом из этих форматов и свободно конвертировать между форматами, используя встроенную в дату и время функции.
Таким образом, экономя свое DateTime
значение либо как REAL
(флоат) или INTEGER
имеет тот же размер.
Как насчет формата TEXT
? В тексте есть 23 символа YYYY-MM-DD HH:MM:SS.SSS
. Это 8-байтный символ? Если это так, это HUGE Отходы пространства для хранения в текстовом формате (это то, что я сейчас делаю).
Как насчет формата 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;
}
Любая помощь? Я немного запутался в нескольких моментах.
пожалуйста не хранить даты в виде текста. –
FYI: формат даты «REAL» от 24 ноября 4714 г. до н.э. выдает «аргумент ArgumentOutOfRangeException»: * «Указанный аргумент вышел за пределы допустимых значений». * – jp2code
и вам нужно было представить 4714 BC? –