Как хранятся Date Time в DBF
От: Shad Россия  
Дата: 24.04.02 00:54
Оценка:
Привет всем!
Помогите плиз кто знает!
Читаю из DBFки напрямую и не могу понять в каком виде хранятся значения типа DateTime, DBFка из-под VFP 6 SP2. Я работаю в MSVC++.
Re: Как хранятся Date Time в DBF
От: Аноним  
Дата: 24.04.02 04:51
Оценка:
Здравствуйте Shad, Вы писали:

S>Читаю из DBFки напрямую и не могу понять в каком виде хранятся значения типа DateTime, DBFка из-под VFP 6 SP2. Я работаю в MSVC++.


Если дословно, то это "double-precision floating-point Julian day number calculated using Algorithm 199 from Collected Algorithms of the ACM". В общем, это double, содержащий количество дней с какой-то даты. Время определяется дробной частью в долях суток: 0,5 это 12 часов и т.д. Если из этого числа отнять 2415019 (получено экспериментально), то должно получиться OLE DateTime.
Re[2]: Как хранятся Date Time в DBF
От: Shad Россия  
Дата: 25.04.02 04:34
Оценка:
Здравствуйте Аноним, Вы писали:

А>Если дословно, то это "double-precision floating-point Julian day number calculated using Algorithm 199 from А>Collected Algorithms of the ACM". В общем, это double, содержащий количество дней с какой-то даты. Время определяется А>дробной частью в долях суток: 0,5 это 12 часов и т.д. Если из этого числа отнять 2415019 (получено экспериментально), А>то должно получиться OLE DateTime.


Читаю в буфер char* pBuff значение, потом отнимаю 241509 и преобразвываю в DATE, создаю COleDateTime из DATE, пытаюсь получит дату или время, возвращает полную ерунду. Опишите плиз поподробнее процедуру перевода в OLe DateTime или если можно приведите фрагмент кода.
Заранее спасибо
Re[3]: Как хранятся Date Time в DBF
От: Bell Россия  
Дата: 25.04.02 08:33
Оценка:
Здравствуйте Shad, Вы писали:

S>Читаю в буфер char* pBuff значение, потом отнимаю 241509 и преобразвываю в DATE, создаю COleDateTime из DATE, пытаюсь получит дату или время, возвращает полную ерунду. Опишите плиз поподробнее процедуру перевода в OLe DateTime или если можно приведите фрагмент кода.

S> Заранее спасибо

А pBuff в double перед вычитанием преобразовывать пробовали?
Любите книгу — источник знаний (с) М.Горький
Re[4]: Как хранятся Date Time в DBF
От: Shad Россия  
Дата: 26.04.02 00:53
Оценка:
Здравствуйте Bell, Вы писали:


S>>Читаю в буфер char* pBuff значение, потом отнимаю 241509 и преобразвываю в DATE, S>>создаю COleDateTime из DATE, пытаюсь получит дату или время, возвращает полную S>>ерунду. Опишите плиз поподробнее процедуру перевода в OLe DateTime или если можно S>>приведите фрагмент кода.


B>А pBuff в double перед вычитанием преобразовывать пробовали?


Кончено я его преобразовывал, как же иначе Тем неменее ничего не получается.
Еще раз прошу помощи.
Re[5]: Как хранятся Date Time в DBF
От: Bell Россия  
Дата: 26.04.02 07:41
Оценка:
Здравствуйте Shad, Вы писали:

S>Кончено я его преобразовывал, как же иначе Тем неменее ничего не получается.

S>Еще раз прошу помощи.

Странно как-то
А можно кусочек кода?
Любите книгу — источник знаний (с) М.Горький
Re[3]: Как хранятся Date Time в DBF
От: Головлев Александр Россия about:blank
Дата: 26.04.02 09:16
Оценка:
Здравствуйте Shad, Вы писали:

S>Читаю в буфер char* pBuff значение, потом отнимаю 241509 и преобразвываю в DATE, создаю COleDateTime из DATE, пытаюсь получит дату или время, возвращает полную ерунду. Опишите плиз поподробнее процедуру перевода в OLe DateTime или если можно приведите фрагмент кода.


:shuffle: Забыл в прошлый раз зарегистрироваться...
Судя по описанию, все правильно. Может быть, дело в пропущенной единице? Должно быть 2415019.
char* buffer;
...
DATE date = *(double*)buffer - 2415019.0;
Re[4]: Как хранятся Date Time в DBF
От: Shad Россия  
Дата: 27.04.02 01:18
Оценка:
Здравствуйте Головлев Александр, Вы писали:

ГА> Забыл в прошлый раз зарегистрироваться...

ГА>Судя по описанию, все правильно. Может быть, дело в пропущенной единице? Должно быть 2415019.
ГА>
ГА>char* buffer;
ГА>...
ГА>DATE date = *(double*)buffer - 2415019.0;
ГА>


Я раскопал хелп от фокса 3.0 и прочитал там, что DateTime храниться в двух целых четырехбайтных числах первое число — дата, второе — время в миллисекундах от полуночи.
Попробовал извлечь время — все верно. Действительно получается правильное значение. Но опять же проблема с датой. Не понятно в каком формате это все хранится. Никаких ссылок в MSDN я на это дело не нашел.
В любом случае, спасибо что откликнулись и за совет.
Re[5]: Как хранятся Date Time в DBF
От: Головлев Александр Россия about:blank
Дата: 27.04.02 05:36
Оценка:
Здравствуйте Shad, Вы писали:

S>Я раскопал хелп от фокса 3.0 и прочитал там, что DateTime храниться в двух целых четырехбайтных числах первое число — дата, второе — время в миллисекундах от полуночи.


Похоже, ошибочка вышла. Я имел дело с внутренним представлением DateTime через FoxAPI и был абсолютно уверен, что и в файле он хранится также. И зачем им это надо?

S>Попробовал извлечь время — все верно. Действительно получается правильное значение. Но опять же проблема с датой. Не понятно в каком формате это все хранится.


А вот с датой вроде все сходится. Я взял 4 байта как int, отнял 2415019 и если это привести к double, то получается DATE.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.