Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.052 c
1-1090577408
NeyroSpace
2004-07-23 14:10
2004.08.08
Как скрыть заголовой в панели задач у "ничейной" формы


3-1089624467
Koala
2004-07-12 13:27
2004.08.08
Помогите с запросом


4-1088512871
Basilio
2004-06-29 16:41
2004.08.08
Как поменять владельца процесса?


14-1089112226
zamkom
2004-07-06 15:10
2004.08.08
Ночной дозор


3-1089285208
VadimKV
2004-07-08 15:13
2004.08.08
Простой запрос из MSSQL2000 не работает в FireBerd1.5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский