Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.10.2020, 21:15
Motorolla Motorolla вне форума
Прохожий
 
Регистрация: 06.06.2019
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию TimeStamp из TDateTime

Нужен штамп с дискретностью 100uSec.
Сделал так, но выглядит удручающе. Полагаю, что есть более трезвый способ?..
Код:
 function DateTimeToTimeStamp(DateTime:TDateTime):cardinal;
begin
     result:= round(frac(DateTime)*1000000000);
end;
Ответить с цитированием
  #2  
Старый 03.10.2020, 21:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,601
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не понятно, что имеется в виду под "нужен".
Вообще, твой код в принципе не правильный. Т.к. в TDateTime в дробной части хранится время в виде части целого дня, т.е. 0.5 - это полдень. Тогда, что бы получить праильное время надо делать как-то так:
Код:
result := frac(DateTime)*(24*60*60); // получили время в секундах
result := result * 1000000; // теперь перевели в кол-во микросекунд
Ответить с цитированием
  #3  
Старый 03.10.2020, 22:32
Motorolla Motorolla вне форума
Прохожий
 
Регистрация: 06.06.2019
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Т.к. в TDateTime в дробной части хранится время в виде части целого дня, т.е. 0.5 - это полдень.
Понял, просто описано было - "Она сохраняется как переменная Double, с датой как целая часть, а время как дробная.", а на калькулятор не прикидывал.
У оборудования к которому программу пытаюсь написать есть внутренний счётчик "TimeStamp", отсчитывающий время после старта с инкрементом по 0,1мс, поэтому мне нужно подогнать реальное время к его формату.
Спасибо за подсказку.
Ответить с цитированием
  #4  
Старый 05.10.2020, 21:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,601
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, тогда может лучше воспользоваться чем-то типа GetTickCount - кол-во, если не ошибаюсь, микросекунд с определенной даты (аналог UNIX Time).
Ответить с цитированием
  #5  
Старый 06.10.2020, 00:40
Motorolla Motorolla вне форума
Прохожий
 
Регистрация: 06.06.2019
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Оно в миллисекундах и завязано за запуск системы с обнулением через определённое время. Однажды пользовался ею, но забыл про её существование. Спасибо, на неё и переориентируюсь. К тому же, как показала практика, мне дискретность в микросекундах и не нужна - аппарат строчит CAN сообщения не чаще 2mS(самый быстрый фрэйм, который замечен и тот CF), а в основной массе 10-15mS, плюс аппаратный FIFO оказался очень вместительным.
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2020

ВКонтакте   Facebook   Twitter