![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Считав 8 байт из файла как преобразовать в Datetime ?
SLE © (2004-07-26 08:29:00)Например 46 216 130 45 86 148 226 64 соответствуют 04.03.2004 16:38:00. Каков алгоритм пересчета ?
Ega23 (2004-07-26 10:03:00) [1]Тип TDateTime это Double. 8 байт!
Восьми, восьми. С integer спутал.
Anatoly Podgoretsky (2004-07-26 09:58:00) [2]SLE (26.07.04 09:40) [21]
В ФоксПро для это существовало LCK, что в VISUAL FOXPRO
Думкин (2004-07-26 09:48:00) [3]такого типа нет, есть TDateTime:
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.
Following are some examples of TDateTime values and their corresponding dates and times:
0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
To find the fractional number of days between two dates, simply subtract the two values, unless one of the TDateTime values is negative. Similarly, to increment a date and time value by a certain fractional number of days, add the fractional number to the date and time value if the TDateTime value is positive.
When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 am on 12/29/1899 is –1.25, not –1 + 0.25, which would be –
0.75. There are no TDateTime values between –1 and 0.
Note: Delphi 1.0 calculated the date from year 1 instead of from 1899. To convert a Delphi 1.0 date to a TDateTime value in later versions of the Delphi language, subtract 693594.0 from the Delphi 1.0 date.
SLE (2004-07-26 09:44:00) [4]Вопрос можно поставить проще. Как в Delphi хранится тип Datetime ?
CHES (2004-07-26 09:43:00) [5]>SLE (26.07.04 09:40) [21]
я тихо фигею...
>Ega32 Сорри PuntoSwitcher постарался читать надо конечно же
Тип TDateTime это Double. 8 байт!
Fay (2004-07-26 09:43:00) [6]2SLE (26.07.04 09:40) [21]
тогда вали на "Мастера VFP"
Думкин (2004-07-26 09:42:00) [7]> [21] SLE (26.07.04 09:40)
1. Прочитать про хранение типа Double.
2. Прочитать про хранение TDateTime с использованием Double.
SLE (2004-07-26 09:40:00) [8]Какой то чел на Delphi записал файл с данными. Теперь я из VISUAL FOXPROсчитываю их для дальнейшей работы. Дата записана так как я три раза уже показал. Команды Delphi меня не интересуют.
CHES (2004-07-26 09:33:00) [9]> Fay идея понятна, спасибо
>Ega32 Тип ЕВфеуЕшьу это Double. 8байт!
Fay (2004-07-26 09:31:00) [10]CHES © (26.07.04 09:28) [17]
Если вкратце, то
var
h, n : DWORD;
cd : TDateTime;
begin
h := CreateFile(....
...
ReadFile(h, cd, 8, n, nil);
....
Ega23 (2004-07-26 09:29:00) [11]Если ты будешь читать ПОБАЙТНО, то ещё надо будет смотреть, где старший, а где младший байт.
И вообще, если TDateTime в Delphi 4-х байтовый тип, то не проще-ли и писать и читать в файл по 4 байта?
CHES (2004-07-26 09:28:00) [12]>Fay Или я чего то не понимаю, но по моему сразу нельзя. Буду благодарен за пример
>SLE а чем CHES © (26.07.04 09:11) [9] не устраивает? Пример рабочий.
Думкин (2004-07-26 09:24:00) [13]> [14] SLE (26.07.04 09:22)
Ты читать умеешь? Или как?
> [4] Думкин © (26.07.04 08:42)
Fay (2004-07-26 09:23:00) [14]2CHES © (26.07.04 09:20) [13]
Я имел ввиду "А нельзя сразу в сdпрочитать?!"
SLE (2004-07-26 09:22:00) [15]Поясняю: запишите в файл данные в формате integer например число 20, а затем считайте эти 4 байта. Получится следующее 20 0 0 0. А теперь Datetime - 04.03.2004 16:38:00. При считывании 8 байт получается вот такое 46 216 130 45 86 148 226 64. Вопрос в начале.
CHES (2004-07-26 09:20:00) [16]to Ega32 Приведенный массив соответсвут дате
to Fay можно конечно. Я б так и делал, но вдруг его указатель не устроит?
to SLE массив лучше объяви как packed
Anatoly Podgoretsky (2004-07-26 09:16:00) [17]SLE (26.07.04 09:09) [8]
Если это двоичные значения в форме, основанной на степенях 256-и, то приведи алгоритм кодирования
В Дельфи другое хранение, простое число с плавающей запятой.
Fay (2004-07-26 09:16:00) [18]2CHES © (26.07.04 09:11) [9]
Какие ужасы!!! А нельзя сразу в d прочитать?!
Ega23 (2004-07-26 09:15:00) [19]Но важно то, что Datetime в Delphi хранится в таком виде.
Сомнительно. Навскидку, сейчас целая часть у даты где-то 35 или 37 тысяч должна быть.
Сдаётся мне, ты что-то путаешь.
CHES (2004-07-26 09:11:00) [20]дык как угодно.
Например ты считываешь это в массив байт. Тогда так
...
var
Ar:array [0..7] of byte;//здесь считанные байты из файла
d:^TDateTime;
cd: TDateTime;
...
d:=@Ar;
cd:=d^;// Вот твоя дата