Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизСчитав 8 байт из файла как преобразовать в Datetime ? Найти похожие ветки
← →
SLE (2004-07-26 08:29) [0]Например 46 216 130 45 86 148 226 64 соответствуют 04.03.2004 16:38:00. Каков алгоритм пересчета ?
← →
ЮЮ © (2004-07-26 08:36) [1]А если считать их (8 байтов) сразу в Datetime?
← →
SLE (2004-07-26 08:40) [2]Я считываю из VFP
← →
Anatoly Podgoretsky © (2004-07-26 08:41) [3]А каким образом эти числа у тебя появились?
← →
Думкин © (2004-07-26 08:42) [4]TDateTime = type Double; Далее справку читаем.
← →
SLE (2004-07-26 08:48) [5]Для Anatoly Podgoretsky : Открываю файл и считываю побайтно.
← →
ЮЮ © (2004-07-26 08:56) [6]>Открываю файл и считываю побайтно.
в VFP ? Или в Delphi?
← →
Anatoly Podgoretsky © (2004-07-26 08:58) [7]SLE (26.07.04 08:48) [5]
Ты очень много и информативно нам сообщил, можно было и короче - читаю.
← →
SLE (2004-07-26 09:09) [8]Для ЮЮ : В VFP
Для Anatoly Podgoretsky : Это двоичные значения в форме, основанной на степенях 256-и. Но важно то, что Datetime в Delphi хранится в таком виде.
← →
CHES © (2004-07-26 09:11) [9]дык как угодно.
Например ты считываешь это в массив байт. Тогда так
...
var
Ar:array [0..7] of byte;//здесь считанные байты из файла
d:^TDateTime;
cd: TDateTime;
...
d:=@Ar;
cd:=d^;// Вот твоя дата
← →
Ega23 © (2004-07-26 09:15) [10]Но важно то, что Datetime в Delphi хранится в таком виде.
Сомнительно. Навскидку, сейчас целая часть у даты где-то 35 или 37 тысяч должна быть.
Сдаётся мне, ты что-то путаешь.
← →
Fay © (2004-07-26 09:16) [11]2CHES © (26.07.04 09:11) [9]
Какие ужасы!!! А нельзя сразу в d прочитать?!
← →
Anatoly Podgoretsky © (2004-07-26 09:16) [12]SLE (26.07.04 09:09) [8]
Если это двоичные значения в форме, основанной на степенях 256-и, то приведи алгоритм кодирования
В Дельфи другое хранение, простое число с плавающей запятой.
← →
CHES © (2004-07-26 09:20) [13]to Ega32 Приведенный массив соответсвут дате
to Fay можно конечно. Я б так и делал, но вдруг его указатель не устроит?
to SLE массив лучше объяви как packed
← →
SLE (2004-07-26 09:22) [14]Поясняю: запишите в файл данные в формате integer например число 20, а затем считайте эти 4 байта. Получится следующее 20 0 0 0. А теперь Datetime - 04.03.2004 16:38:00. При считывании 8 байт получается вот такое 46 216 130 45 86 148 226 64. Вопрос в начале.
← →
Fay © (2004-07-26 09:23) [15]2CHES © (26.07.04 09:20) [13]
Я имел ввиду "А нельзя сразу в сd прочитать?!"
← →
Думкин © (2004-07-26 09:24) [16]> [14] SLE (26.07.04 09:22)
Ты читать умеешь? Или как?
> [4] Думкин © (26.07.04 08:42)
← →
CHES © (2004-07-26 09:28) [17]>Fay Или я чего то не понимаю, но по моему сразу нельзя. Буду благодарен за пример
>SLE а чем CHES © (26.07.04 09:11) [9] не устраивает? Пример рабочий.
← →
Ega23 © (2004-07-26 09:29) [18]Если ты будешь читать ПОБАЙТНО, то ещё надо будет смотреть, где старший, а где младший байт.
И вообще, если TDateTime в Delphi 4-х байтовый тип, то не проще-ли и писать и читать в файл по 4 байта?
← →
Fay © (2004-07-26 09:31) [19]CHES © (26.07.04 09:28) [17]
Если вкратце, тоvar
h, n : DWORD;
cd : TDateTime;
begin
h := CreateFile(....
...
ReadFile(h, cd, 8, n, nil);
....
← →
CHES © (2004-07-26 09:33) [20]> Fay идея понятна, спасибо
>Ega32 Тип ЕВфеуЕшьу это Double. 8 байт!
← →
SLE (2004-07-26 09:40) [21]Какой то чел на Delphi записал файл с данными. Теперь я из VISUAL FOXPRO считываю их для дальнейшей работы. Дата записана так как я три раза уже показал. Команды Delphi меня не интересуют.
← →
Думкин © (2004-07-26 09:42) [22]> [21] SLE (26.07.04 09:40)
1. Прочитать про хранение типа Double.
2. Прочитать про хранение TDateTime с использованием Double.
← →
Fay © (2004-07-26 09:43) [23]2SLE (26.07.04 09:40) [21]
тогда вали на "Мастера VFP"
← →
CHES © (2004-07-26 09:43) [24]>SLE (26.07.04 09:40) [21]
я тихо фигею...
>Ega32 Сорри PuntoSwitcher постарался читать надо конечно же
Тип TDateTime это Double. 8 байт!
← →
SLE (2004-07-26 09:44) [25]Вопрос можно поставить проще. Как в Delphi хранится тип Datetime ?
← →
Думкин © (2004-07-26 09:48) [26]такого типа нет, есть 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.
← →
Anatoly Podgoretsky © (2004-07-26 09:58) [27]SLE (26.07.04 09:40) [21]
В ФоксПро для это существовало LCK, что в VISUAL FOXPRO
← →
Ega23 © (2004-07-26 10:03) [28]Тип TDateTime это Double. 8 байт!
Восьми, восьми. С integer спутал.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.046 c