LINUX.ORG.RU

Ответ на: комментарий от user2132

Мне погуглить за тебя? Даже тот же быдлохабр:

https://habr.com/en/post/46947/

TDateTime представляет собой число с плавающей точкой, где целая часть — число дней с 30 декабря 1899 года до текущего дня, а дробная часть — число секунд от начала дня.

XMs ★★★★★ ()
Последнее исправление: XMs (всего исправлений: 1)
Ответ на: комментарий от AntonI

Во втором сообщении есть ссылка на хабр, где приведён вот такой код:

int time_t = (int)((tDateTime — 25569.16666) * 86400); //получили время в формате time_t

Опуская придирки, получаем возможность вывести разницу в секундах. Потом, как в первым сообщении и говорилось, домножаем на тысячу и получаем временной интервал в миллисекундах

XMs ★★★★★ ()

ищи высокоточные таймеры для миллисекунд, а не date_time. они для разных целей. date_time - это часики и календари показывать. а высокоточные таймеры - для точного измерения интервалов, у них точность не менее миллисекунды. там или класс нужный быть должен, или в системной либе С++ есть.

alysnix ()
Ответ на: комментарий от XMs

Даже на ЛОРе есть тред: c++ tdatetime to unix timestamp

у date_time в осях грануларити обычно в секунду. искать там миллисекунды бессмысленно. кому вообще надо сколько миллисекунд прошло с 1970 года?
а вот сколько миллисекунд прошло от запуска компа - это надо многим. чтобы интервалы между событиями точно получать.

alysnix ()
Ответ на: комментарий от alysnix

Вопрос ТСа не про точность, а про «как получить». То, что типичный *DateTime обычно хранит секунды и для чего-то более точного не подходит, мне известно

XMs ★★★★★ ()
Ответ на: комментарий от alysnix

Мало ли, какая у ТСа задача… Может, ему надо передать разницу в функцию, которая только миллисекунды и принимает. Тут только гадать можно. Если бы он спросил «как получить миллисекундную точность средствами Borland C++ и можно ли задействовать для этого TDateTime» — тогда да, можно было бы и подумать. А так — на поставленный вопрос я ответ дал

XMs ★★★★★ ()
Ответ на: комментарий от user2132

Тогда при чём тут TDateTime? Как уже правильно заметили, он для этого не подходит. Я бы рекомендовал использовать clock_gettime() или его аналог дяди Бормана

XMs ★★★★★ ()
Ответ на: комментарий от user2132

Судя по http://docwiki.embarcadero.com/RADStudio/XE4/en/Date_and_Time_Support, тебе надо использовать TTimeStamp:

http://docwiki.embarcadero.com/Libraries/XE4/en/System.SysUtils.TTimeStamp

TTimeStamp represents time and date values.

Use TTimeStamp to represent date and time values when a great deal of accuracy is required for the time portion. When the time values do not need to be precise to the millisecond, use the more compact TDateTime representation. If additional precision is needed, use TSQLTimeStamp (but do not assign it to a Variant).

Только что-то я не вижу функций, которые бы возвращали текущее время не в TDateTime

XMs ★★★★★ ()
Последнее исправление: XMs (всего исправлений: 1)
Ответ на: комментарий от XMs

Вот так пока сделал:

LARGE_INTEGER start, finish, freq;
QueryPerformanceFrequency( &freq );
QueryPerformanceCounter( &start );


QueryPerformanceCounter( &finish );

double time = (finish.QuadPart - start.QuadPart) / (double)freq.QuadPart;

Как считаешь это хороший вариант ?

user2132 ()
Ответ на: комментарий от user2132

Как считаешь это хороший вариант ?

все эти клоки работают так или иначе от этой функции stdlib.
http://www.cplusplus.com/reference/ctime/clock/
вот либо прям ее юзай, либо смотри во что ее в твоем борланде завернули.

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

alysnix ()