В SQLite базе встретилось DATETIME поле со значением 2455035.28628391. Известно, что это 2009-й год, а не 8600-й, как выходит, если трактовать её стандартным способом типа
double dateTimeRepr = (double)reader.GetDouble(6);
DateTime dateTime = DateTime.FromOADate(dateTimeRepr).ToLocalTime();
На таком не работает и reader.GetDateTime. Не работает ни один из коннекшн стрингов (DateTime=Ticks/JulianDays/ISOxxx).
Кто-нибудь сталкивался с такой странностью? Как прочитать валидное время?
" Аноним 620 " <0@users.rsdn.ru> wrote in message
news:3575957@news.rsdn.ru...
> Кто-нибудь сталкивался с такой странностью? Как прочитать валидное время?
Это юлианское представление даты, тут закодировано 22/07/2009 6:52:14 PM.
Не знаю как там в шарпе, в Delphi из него обычная дата получается так:
const
D: Double = 2455035.28628391;
begin
ShowMessage(DateTimeToStr(JulianDateToDateTime(D)));
end;
Posted via RSDN NNTP Server 2.1 beta
Спасибо, видимо, я неправильно писал connection string. reader.GetDateTime заработал после DateTimeFormat=JulianDay; в connection string:
@"Data Source={0};Read Only=True;Version=3;DateTimeFormat=JulianDay;"
Здравствуйте, Аноним, Вы писали:
> В SQLite базе встретилось DATETIME поле со значением 2455035.28628391. Известно, что это 2009-й год, а не 8600-й, как выходит, если трактовать её стандартным способом типа
Небольшая ремарка. В SQLite нет типа DATETIME. А это число можно трактовать в зависимости от контекста (в некоторых случаях ноль может соответствовать 1970 году).
Здравствуйте, Аноним, Вы писали:
> Нету может и нету, но в схеме SQLite Database Browser показывает DATETIME. Это и имелось в виду.
Ну это я к тому написал, что следует держать в уме, что там может быть написано и LONGINT, а в реальности быть текстовое поле