Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.08;
Скачать: CL | DM;

Вниз

GetTickCount   Найти похожие ветки 

 
Shuric   (2003-04-24 22:09) [0]

Привет всем. Дуратский вопрос, но никак не могу сообразить :(
Подскажите плиз, как привести результат GetTickCount к TDateTime. Спасибо.


 
MBo ©   (2003-04-24 22:13) [1]

А зачем?
Если все же нужно, следует просто прочитать в хелпе о TDateTime.


 
Shuric   (2003-04-24 22:16) [2]

>MBo ©

t := GetTickCount + 1800000;
***.Caption := DateTimeToStr(Now + ?(t)); :(


 
Anatoly Podgorestky   (2003-04-24 22:19) [3]

Если ты не еще не знаешь, то в сутках 24 часа, в часе 60 минут, в ммнуте 60 секунд, в секунде 1000 миллисекунд. И теперь самое главное GetTickCount выдает результаты в миллисекундах и это не время!!!
Но если хочется то наверно в школе переводил из одних едениц измернения в другие, напприсер из миллиграм в граммы, если переводил, то сумеешь перевести и в дни, если нет то значит не судьба, придется идти для переобучения в начальную школу, первый/второй классы.


 
MBo ©   (2003-04-24 22:20) [4]

наводящие вопросы - в каких единицах измеряется GetTickCount?
Что такое TDateTime?


 
Style ©   (2003-04-24 22:28) [5]

Anatoly Podgorestky>
Я слышал, что GetTickCount несколько не точен для измерения времени. Т.е. это не совсем миллисекунды, могут быть не точности.
В своей проге для этого http://novator.org, я перед началом
измерения засекал время, затем отсчета использовал GetTickCount
но на всякий случай в конце измерения вычитал время начала из текущего.
Так ли это??


 
Shuric   (2003-04-24 22:34) [6]

Острики блин :) Вдруг да функция есть.
Ленивый я. Понятное делить, делить и еще раз делить. Однако к TDateTime результат прибавлять, помоему, нельзя. То есть сначало в текс а потом... И вооще системный таймер 55 msec


 
jack128 ©   (2003-04-24 23:51) [7]

к TdateTime как и к любому вещественному числу прибавлять можно..
непонятен смысл перевода GetTickCount в TdateTime...


 
Anatoly Podgorestky   (2003-04-25 00:11) [8]

Зачем три раза делить, надо умножать


 
Anatoly Podgorestky   (2003-04-25 00:12) [9]

Style © (24.04.03 22:28)
Он точный, это виндоус не реального времени


 
Shuric   (2003-04-25 00:38) [10]

Чтоб привести - делить, смотреть остаток... Ну к типа год, месяц, день и т.д., помоему, может ошибаюсь. TDateTime - он вроде тоже с какой-то даты начинается. А проблема - есть, допустим действие, выполняемое по таймеру. Первое выполнение -StartTick=GetTickCount, окончание - EndTick=GetTickCount + 1800000. А надо сказать пользователю доходчево, что окончится, допустим Now + ?(EndTick - GetTickCount)...


 
Anatoly Podgorestky   (2003-04-25 08:44) [11]

Задание по счету выполнил, сколько миллисекунд в сутках, иначе дпльше не стоит продолжать.


 
kostik78ua   (2003-04-25 10:26) [12]

Первое, что пришло в голову:
ShowMessage(FormatDateTime("dd:mm:yyyy hh:nn:ss", TimeStampToDateTime( MSecsToTimeStamp(GetTickCount))));


 
Bel ©   (2003-04-25 10:34) [13]

> Shuric

Что-то не совсем понятно, чего ты хочешь. Если тебе надо прибавить к какому-то значению TDateTime определённое количество секунд (минут, часов), то есть функции:
IncMilliSecond, IncSecond, IncMinute, IncHour... и т.д. до Year. Может это тебе нужно? Если нет, скажи что конкретно тебе надо.


 
kull ©   (2003-04-25 10:36) [14]


> Anatoly Podgorestky (24.04.03 22:19)
> Если ты не еще не знаешь, то в сутках 24 часа, в часе 60
> минут, в ммнуте 60 секунд, в секунде 1000 миллисекунд. И
> теперь самое главное GetTickCount выдает результаты в миллисекундах
> и это не время!!!

Всякое слышал, но то что милисекунды - это не время... Это для меня новость! :)


 
Anatoly Podgorestky   (2003-04-25 10:40) [15]

TDateTime это дата/время, а вот 1000 миллисекунд в этом смысле не время, а интервал.
Это тоже для новость?
1000 мс в этом будет 30.12.1899 00:00:01 ты думаешь ему это нужно?


 
kull ©   (2003-04-25 10:51) [16]

Может вспомним в чем вря измеряется?
Год, месяц, неделя, сутки, час, минута, секунда, милисекунда, микросекунда, и.т.п.


 
Anatoly Podgorestky   (2003-04-25 10:59) [17]

Правильно, а интервалы?
Или для тебя нет разницы между интервалом и временем?
Типа температура - температуру уже будет не температура, а интервал или по другому разница.
Если так то я тут бессилен.


 
kull ©   (2003-04-25 11:01) [18]


> TDateTime это дата/время, а вот 1000 миллисекунд в этом
> смысле не время, а интервал.
> Это тоже для новость?

Можете привести примеры, где время не является интервалом?


 
Bel ©   (2003-04-25 11:02) [19]

> kull ©

Ты не прав. Сказав "GetTickCount - это не время", Anatoly Podgorestky имел ввиду, что это не текущее время. Это количество миллисекунд, прошедшее с момента старта Винды, т.е. интервал. И вообще, Делфи не знает, что такое "время", поэтому оперировать "человеческими" понятиями здесь не имеет смысла. GetTickCount для Делфи - просто число типа Cardinal, а TDateTime - число типа Double.


 
kull ©   (2003-04-25 11:13) [20]


> Bel © (25.04.03 11:02)

А что такое текущее время? Разве это не интервал?
Например какой нынче год? - 2003. Что просто так - 2003?
Нет это число означает количество лет прошедших от ... А дальше кому как нравится от Рождества Христова или от начала нашей эры... Так что так называемое текущее время ни что иное как интервал.


 
Bel ©   (2003-04-25 11:23) [21]

> kull © (25.04.03 11:13)

К теме вопроса твои философские изыскания не имеют никакого отношения. Здесь форум по Делфи, если ты ещё не заметил.

Up:

> Делфи не знает, что такое "время", поэтому оперировать "человеческими" понятиями здесь не имеет смысла. GetTickCount для Делфи - просто число типа Cardinal, а TDateTime - число типа Double.



 
Anatoly Podgorestky   (2003-04-25 11:29) [22]

Это точно, как и понятие год к дате. К сожалению тут я бессилен, это к другим специалистам.


 
kull ©   (2003-04-25 11:36) [23]


> > Делфи не знает, что такое "время", поэтому оперировать
> "человеческими" понятиями здесь не имеет смысла. GetTickCount
> для Делфи - просто число типа Cardinal, а TDateTime - число
> типа Double.

Чтож вы оперируете понятиями время и интервал?

К тому же это вовсе не филосовские изыскания. Заглянем в тот же Help;

TDateTime:
...
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899.

GetTickCount:
If the function succeeds, the return value is the number of milliseconds that have elapsed since Windows was started.

так что Now и GetTickCount - обе функции возвращают интервал. Естественно что можно одни единицы перевести в другие.

Время это как расстояние и само по себе не имеет смысла а только при отсчете от определенного начала. И ничего общего с такой величиной как темература не имеет (так что не надо ее в пример приводить)... :)


 
Anatoly Podgorestky   (2003-04-25 11:39) [24]

Безнадежно


 
kull ©   (2003-04-25 11:45) [25]

Робяты! Просто признайте свою неправоту...
Хотя возможно это безнадежно...


 
Anatoly Podgorestky   (2003-04-25 11:53) [26]

Чувствуется что у тебя большие проблемы с логикой, если для тебя прошло три часа и три часа дня одно и тоже.


 
REA ©   (2003-04-25 11:54) [27]

Ну давайте еще парсеки в ангстремы переведем и успокоимся.


 
kull ©   (2003-04-25 12:08) [28]


> Anatoly Podgorestky (25.04.03 11:53)
> Чувствуется что у тебя большие проблемы с логикой, если
> для тебя прошло три часа и три часа дня одно и тоже.

Так, опять начнем с начала...
Что такое три часа дня? Это как раз значит что прошло три часа с полудня. Или не так?


 
Anatoly Podgorestky   (2003-04-25 12:15) [29]

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


 
Shirson ©   (2003-04-25 12:16) [30]

>Shuric
>Привет всем. Дуратский вопрос, но никак не могу сообразить :(
Подскажите плиз, как привести результат GetTickCount к TDateTime. Спасибо.

Перевод именно в TDateTime не имеет смысла по нескольким причинам.
1. 0 в TDateTime это 30.12.1899 - что тебе это даст? Или ты хочешь дату старта винды определить? Но тогда:
2. GetTickCount возвращает Cardinal - Т.е. через 50 суток работы виндов он обнулится.

Если ты хочешь получить время работы в часах:минутах:секундах:милисекундах, то используй вариант


var
H,M,S,Ms:integer;
Tm:Cardinal;
begin
Tm:=GetTickCount;
H:=Trunc(Tm/3600000);
Tm:=Tm-H*3600000;
M:=Trunc(Tm/60000);
Tm:=Tm-M*60000;
S:=Trunc(Tm/1000);
Tm:=Tm-S*1000;
Ms:=Tm;
...
end;

H - часы
M - минуты
S - секунды
Ms - милисекунды
Их можешь скомпоновать в красивый вид и показать юзверю или ещё на что пустить.
Если же тебе нужно считать "время жизни" винды, которое будет заведомо больше 49 суток, то лучше завести счётчик (типа Cardinal) и начислять в него секунды. Такого счётчика хватит лет на 130 :)


 
Palladin ©   (2003-04-25 12:18) [31]


> kull © (25.04.03 12:08)

а три дня откуда прошло?


 
kull ©   (2003-04-25 12:29) [32]

А три дня пройдет тогда, когда некоторые товарищи поймут, что количество времени измеряется от какой то начальной точки и не бывает просто так 3 часа дня.


 
Palladin ©   (2003-04-25 12:37) [33]

бывае 3 часа дня - это время (можно представить TDateTime)
бывает 3 часа с момента до момента - это интервал

GetTickCount - это интервал


 
Palladin ©   (2003-04-25 12:45) [34]

контрольный выстрел:
время нельзя складывать, а временные интервалы можно


 
Shuric   (2003-04-25 14:12) [35]

На мой взгляд, время абстрактное понятие, со всеми вытекающими последствиями :) ,а вот интервал даже очень прикладное. Горбуха из темы неевклидовой "геометрии" - что есть кротчайшее расстояние между точками, ответ - ничто :)
Вопрос перевода решается, конечно же как предложил >Shirson, за что большое спасибо. Матировка вопроса - многие знают недокументированные функции, а вдруг. И вообще виноваты арабы с их шестидесятеричной системой счисления (может, переведете в третий класс >Anatoly Podgorestky).


 
Anatoly Podgorestky   (2003-04-25 14:16) [36]

За Евклида в старший класс, ни каждый знает ничто.


 
evvcom ©   (2003-04-25 14:21) [37]

Время - понятие относительное, а не абстрактное.


 
kull ©   (2003-04-25 15:38) [38]


> evvcom © (25.04.03 14:21)

Вот! Молодец!



>
> Palladin © (25.04.03 12:37)
> бывае 3 часа дня - это время (можно представить TDateTime)
> бывает 3 часа с момента до момента - это интервал
>
> GetTickCount - это интервал

DecodeTime(Time, H, M, S, MS)
Когда этот вызов возвращает в переменной H число 3, не задумывались откуда система берет это число?

Проведем эксперимент.
Вызываем DecodeTime(Time, H1, M, S, MS) в 12:00 (Полдень)
В H1=12

Вызываем DecodeTime(Time, H2, M, S, MS) в 15:00
В H2=15
H2-H1 = 3

Вот они ваши 3 часа дня!


 
kull ©   (2003-04-25 15:43) [39]


> Palladin

TDateTime:
...
The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899.

Может перевести?


 
Palladin ©   (2003-04-25 16:00) [40]

восставшие мертвецы...
прав
> Anatoly Podgorestky (25.04.03 12:15)




Страницы: 1 2 вся ветка

Текущий архив: 2003.05.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.023 c
1-23150
ЮРИЙ_К
2003-04-24 12:33
2003.05.08
Как продублировать Text-ы дерева в Label ???


14-23280
Kapitan
2003-04-18 11:36
2003.05.08
Register Delphi


14-23396
Evg12
2003-04-20 00:17
2003.05.08
Интересует нормальный компрессор (паковщик)


1-23140
Udjin
2003-04-28 11:47
2003.05.08
Что означает такое объявление переменной


4-23435
Димон1
2003-03-07 13:52
2003.05.08
TreeView OnMouseWheel