Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Int64. Непонятный формат времени. 
:(
    Опции темы
d3lp
Дата 27.8.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.8.2009

Репутация: нет
Всего: нет



Здрасте. Имеется 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 (для повторения этого на других языках) ??
PM MAIL   Вверх
CodeMonkey
Дата 27.8.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Romikgy
Дата 27.8.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

ShowMessage(DateTimeToStr( TDateTime (Date64 )));



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
CodeMonkey
Дата 27.8.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



P.S. Т.к. используется DateTimeToStr, то это - TDateTime или формат даты OLE.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
kami
Дата 27.8.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(d3lp @  27.8.2009,  11:02 Найти цитируемый пост)
Все самое главное проделывает одна строчка

Ничего главного она не проделывает. Просто указывает, что Date64 и sDate64 по сути дела одна переменная (т.е. занимают одну и ту же область памяти). Int64=8 байт, TDateTime=Double=8 байт, т.е. переменные идентичны по размеру друг другу. И в итоге получается, что Int64-значение при доступе к нему через sDate64 "расщепляется" на мантиссу и экспоненту. (как - см. в хелпе). Формат времени - стандартный для Delphi начиная с версии 2 (тоже - см. справку по TDateTime).
Переделать код можно так, правда при этом теряется расположение переменных по одному и тому же адресу, но мне бы использовать директиву absolute просто не пришло бы в голову (никогда ей не пользовался, не хочу этим сказать что она "плохая" или "хорошая" - просто не было необходимости).

Код

  Hex := '40E3861462833945';
  Date64:=HexToInt64(Hex);
  Move(Date64, sDate64, SizeOf(TDateTime)); // при использовании absolute это делается "автоматически",  
      //вернее - вообще не делается, потому что не за чем.
  ShowMessage(DateTimeToStr(sDate64));


PM MAIL WWW   Вверх
d3lp
Дата 27.8.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.8.2009

Репутация: нет
Всего: нет



Всем Спасибо, разъяснили)

Это сообщение отредактировал(а) d3lp - 27.8.2009, 16:04
PM MAIL   Вверх
Romikgy
Дата 27.8.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(kami @  27.8.2009,  12:04 Найти цитируемый пост)
 Move(Date64, sDate64, SizeOf(TDateTime)); // при использовании absolute это делается "автоматически",  

при абсолюте не производится копирования, использует одна переменая , и передаются указатели на нее


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
kami
Дата 27.8.2009, 22:06 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Romikgy @  27.8.2009,  20:22 Найти цитируемый пост)
при абсолюте не производится копирования, использует одна переменая , и передаются указатели на нее

Цитируй, пожалуйста, комментарии полностью. Потому что строчкой ниже именно это и было сказано:
Цитата(kami @  27.8.2009,  13:04 Найти цитируемый пост)
 //вернее - вообще не делается, потому что не за чем.


Добавлено через 1 минуту и 43 секунды
Ну, и выше это тоже было разъяснено:
Цитата(kami @  27.8.2009,  13:04 Найти цитируемый пост)
 Date64 и sDate64 по сути дела одна переменная (т.е. занимают одну и ту же область памяти).


PM MAIL WWW   Вверх
Romikgy
Дата 28.8.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



kami, зачем тогда добавлять не нужные ( не корректные ) данные в свой пост ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
kami
Дата 28.8.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Romikgy, 
Почему не нужные и некорректные?
Изначально вопрос звучал, как то же самое можно сделать без использования absolute.
Вот я и изложил свое мнение по этому поводу, о чем опять-таки прямо сказал в том сообщении:
Цитата(kami @  27.8.2009,  13:04 Найти цитируемый пост)
Переделать код можно так, правда при этом теряется расположение переменных по одному и тому же адресу, но мне бы использовать директиву absolute просто не пришло бы в голову (никогда ей не пользовался, не хочу этим сказать что она "плохая" или "хорошая" - просто не было необходимости).

И пояснил код, как умею. Старался, чтобы вышло максимально понятно и прозрачно при прочтении всего сообщения.
Если ввел в заблуждение - прошу прощения.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.