powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / req_help! странный формат хранения даты
3 сообщений из 3, страница 1 из 1
req_help! странный формат хранения даты
    #34488899
KeyOff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никто не сталкивался с таким хранением данных в ДБФах :

DATE_O Character(4) <- 12 64 25 00
DATE_M Character (4) <- 56 72 25 20
DATE_DG Character (4) <- AC 70 25 20


в 16-чных последовательностях зашиты даты 01.11.2005, 01.01.1997, 01.01.2007

интересует как собстно перевести в человеческий формат эти данные человеческим способом ?
...
Рейтинг: 0 / 0
req_help! странный формат хранения даты
    #34490139
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyOffникто не сталкивался с таким хранением данных в ДБФах :

DATE_O Character(4) <- 12 64 25 00
DATE_M Character (4) <- 56 72 25 20
DATE_DG Character (4) <- AC 70 25 20


в 16-чных последовательностях зашиты даты 01.11.2005, 01.01.1997, 01.01.2007

интересует как собстно перевести в человеческий формат эти данные человеческим способом ?
Похоже, что первые два байта в обратном порядке это количество дней от '12.11.1926'. Навскидку, попробуй на своих данных что-то типа:
{12.11.1926} + (ASC(SUBSTR(DATE_O, 2, 1)) * 0xFF + ASC(SUBSTR(DATE_O, 1, 1)))

А что означают остальные два байта (может быть время) и почему такая странная точка отсчета, я сказать не могу.
...
Рейтинг: 0 / 0
req_help! странный формат хранения даты
    #34491235
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходные ссылке уже в архиве, поэтому просто циататы

================================
Формат хранения типа DateTime

FoxPro

8 байт

Первые 4 байта - количество дней по Юлианскому исчислению (функция SYS(11, DateTime()))
Следующие 4 байта - количество миллисекунд с полуночи с точностью до 333 миллисекунд

MS SQL

при конвертации в Double

Целая часть - количество дней от 01.01.1900
Дробная часть - отношение количества миллисекунд прошедших с полуночи на количество миллисекунд в сутках (86400000) с точностью до 3.33 миллисекунд (в 100 раз точнее, чем в FoxPro)

Excel

при конвертации в Double

Целая часть - количество дней от 31.12.1900
Дробная часть - отношение количества миллисекунд прошедших с полуночи на количество миллисекунд в сутках (86400000). Точность неизвестна!

============================

См. в "Библиотека алгоритмов 151б-200б" серия "Библиотека технической
кибернетики" издательства "Радио и связь" 1981 год
199б - это значит наша модификация импортного алгоритма.
Состоит из 4-х процедур: первые две порядковый номер дня отсчитывается от
начала юлианского периода(1 января 4713год до н.э.), а другие две от 1
января 1900 года.
Юлианский период это промежуток времени в 7980 лет, исползуемый в
астрономических и хронологических расчетах. Благодаря этому длительность
того или иного астрономического или исторического события, выраженная в
сутках, может быть определена путем простого вычитания номеров дней,
ссответствующих концу и началу события.( из описания в книге).
Алгоритмы приведены в алголе.
============================

Судя по всему, ты ошибся в последних двух датах: DATE_M и DATE_DG. Последний байт должен иметь значение 00 в обеих случаях. Тогда это переводится в дату следующим образом

Код: plaintext
1.
2.
DATE_O = 0x12  +  256 *0x64 +  256 * 256 *0x25 +  256 * 256 * 256 *0x00 =  2450450 
?SYS( 10 , 2450450 )

Получим значение 01.01.1997
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / req_help! странный формат хранения даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]