Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 11:51   #1
bogoga
 
Регистрация: 23.05.2009
Сообщений: 4
По умолчанию Delphi. Int64. Непонятный формат времени.

Здрасте. Имеется 8 байтовая последовательность символов, после ее перевода в hex получается число с обратным порядком байт (little-endian): 40E3861462833945, далее перевожу это в Int64: 4675728260250941765

Следующий код переводит это число в дату:
Цитата:
var
Date64: Int64;
sDate64: TDateTime absolute Date64;
Hex: String;
begin
Hex := '40E3861462833945';
Date64 := HexToInt64(Hex); // 4675728260250941765
ShowMessage(DateTimeToStr(sDate64)) ; // 20.06.2009 15:17:19
end;
Все самое главное проделывает одна строчка sDate64: TDateTime absolute Date64;

Вопрос: что это за формат времени такой 40E3861462833945 и как еще из него можно получить дату 20.06.2009 15:17:19 без использования директивы absolute (для повторения этого на других языках) ??
bogoga вне форума Ответить с цитированием
Старый 27.08.2009, 13:08   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

А если грузить его сразу в double, не используя промежуточный int64? Это ведь из файла откуда то берется?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.08.2009, 13:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это за формат времени такой 40E3861462833945
А с чего ты взял что это формат времени?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2009, 13:29   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Теоретически 8 байт могут быть чем угодно, в том числе и значением времени, но только грузить его (если это время) надо не в int64, а в double или в TDateTime, что одно и то же.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.08.2009, 13:31   #5
bogoga
 
Регистрация: 23.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А с чего ты взял что это формат времени?
Ну возможно не формат, а способ хранения) Как, например, FILETIME или SYSTEMTIME в бинарном виде, но тут слишком большое число для этих структур. В общем, так кодируется одна дата, используемая в одном из пакетов ICQ протокола, возможно и где-то еще, вот я и подумал может это что-то стандартное и где-то еще используемое?

Цитата:
Сообщение от mutabor Посмотреть сообщение
А если грузить его сразу в double, не используя промежуточный int64? Это ведь из файла откуда то берется?
Дело в том, что это нужно будет все повторить на другом языке, а именно PHP, а там вообще с типами проблема=) . Так что хотелось бы выяснить пошаговое преобразование такого большого числа в простую дату (в кол-во секунд)
bogoga вне форума Ответить с цитированием
Старый 27.08.2009, 13:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вот я и подумал может это что-то стандартное и где-то еще используемое?
Ну не знаю... Я бы не надеялся на это...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2009, 14:02   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от bogoga Посмотреть сообщение
Дело в том, что это нужно будет все повторить на другом языке, а именно PHP, а там вообще с типами проблема=) . Так что хотелось бы выяснить пошаговое преобразование такого большого числа в простую дату (в кол-во секунд)
В Delphi формат TDateTime не целочисленный, это 8 байтное число с плавающей точкой, до точки - дата, после точки - время (кол-во секунд, к-рое ты упоминал).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.08.2009, 14:32   #8
bogoga
 
Регистрация: 23.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
В Delphi формат TDateTime не целочисленный, это 8 байтное число с плавающей точкой, до точки - дата, после точки - время (кол-во секунд, к-рое ты упоминал).
Воо) Значит формат определили, спасибо. Тогда вернемся к вашему совету считать число сразу в Double или как можно перевести в него считанный Int64 без использование директивы absolute? и по возможности отделить целую часть от дробной)
bogoga вне форума Ответить с цитированием
Старый 27.08.2009, 15:57   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вот так например в Дельфи работает, здесь идет прямой доступ к памяти, что на PHP я так думаю будет недоступно.
Код:
var
  buf: int64;
  d: TDateTime;
  a : Pointer;
begin
  buf:=4675728260250941765;
  a:=@buf;
  d:=Double(a^);
  Label1.Caption:=DateTimeToStr(d);
end;
А вообще нужно как-то сразу грузить сырые данные в нужный тип, из хекс строки (обратной вот этому - 40E3861462833945) сразу в float-тип. Может в PHP есть такая фукнция к-рая сразу хекс строку или переменную может во float загнать.

p.s. То же самое в Дельфи можно сделать с помощью потока TMemoryStream, закинуть в него целочисленную переменную как буфер, а прочесть в вещественную, по сути это тот же механизм, только другая его реализация.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 27.08.2009 в 16:00.
mutabor вне форума Ответить с цитированием
Старый 27.08.2009, 17:10   #10
bogoga
 
Регистрация: 23.05.2009
Сообщений: 4
По умолчанию

mutabor, спасибо за помощь, на пхп тоже нашел функцию нужную)
bogoga вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный глюк Delphi 2009 aesoem Общие вопросы Delphi 3 15.08.2009 12:30
формат упакованного времени в DELPHI dimonbest Общие вопросы Delphi 32 23.09.2008 02:15
Как изменить в программе формат отображения даты и времени Alex_C Общие вопросы Delphi 2 13.09.2008 23:39
Delphi и int64 Onix84 Общие вопросы Delphi 1 18.11.2007 23:28