Текущий архив: 2007.04.08;
Скачать: CL | DM;
Вниз
сравнить текущее время с заданным DateTimePicker Найти похожие ветки
← →
Roman_S © (2007-03-18 08:46) [0]Задаю время с помощью DateTimePicker. Подскажите - как при Form.Show задавать в нём текущее время? И, главное, - как сравнить текущее время с заданным в событии OnTimer (микросекунды я не задаю)?
← →
Loginov Dmitry © (2007-03-18 08:55) [1]> Подскажите - как при Form.Show задавать в нём текущее время?
DateTimePicker.Time := Time;
> как сравнить текущее время с заданным в событии OnTimer
>, <, =, -, +, /, *
← →
Roman_S © (2007-03-18 09:40) [2]Просто мне хочется разобраться!
Люди пишут:
1. Время хранится в Double
The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.
поэтому точность там по крайней мере миллисекунда. А в TDateTimePicker вводить время можно только до секунды.
Как ни старайся, сравнение с Now будет всегда не равным. Нужно приводить все к одному формату.
2. Сравнивать с now напрямую можно только на > или <. Но нужно еще учитывать, что если
TDateTimePicker.Kind=dtkTime, то пользователем меняется только составляющая времени в TDateTimePicker.Time,
хотя тип поля TDateTime; дата там подставляется из поля TDateTimePicker.Date - ее нужно отслеживать в коде.
Так как-же правильно? Где учитывать дату, милисекунды... где писать Time, где Now?
Как правильно сранивать время?
← →
Virgo_Style © (2007-03-18 09:59) [3]1. не проверять на равенство, или проверять с определенной точностью: |Now-SomeTime|<Delta
2. Намек : Время - это дробная часть, а выделить ее - дело несложное.
← →
Ант (2007-03-18 12:36) [4]ЧТо за бред - сравнить текущее время с тем который ввел пользователь
то есть если ты например даже с точностью до секунды сравниваешь
то через секунду повторный запуск процедуры уже вернет False
Если же речь идет о сравнении дат, то |Now-SomeTime|<1
← →
Roman_S © (2007-03-18 13:27) [5]Почти получилось так:
procedure TForm2.Timer1Timer(Sender: TObject);
var
Hour1, Min1, Sec1, MSec1: Word;
Hour2, Min2, Sec2, MSec2: Word;
begin
DecodeTime(Time, Hour1, Min1, Sec1, MSec1); // Раскодировать текущее время
DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2);
if (Hour1 = Hour2) and (Min1 = Min2)
then begin
ShowMessage("Получилось!");
Timer1.Enabled:=false;
end;
end;
Сообщение выводится почему-то 6 раз: "Получилось!" Что не так?
Скажите, пожалуйста - как в DateTimePicker показавать/задавать только часы и минуты? И как обойтись без лишних переменных:var
Hour1, Min1, Sec1, MSec1: Word;
Hour2, Min2, Sec2, MSec2: Word;
← →
RASkov (2007-03-18 13:34) [6]> Скажите, пожалуйста - как в DateTimePicker показавать/задавать
> только часы и минуты?
DateTimePicker.Format:="hh ч. : mm м."
← →
Anatoly Podgoretsky © (2007-03-18 13:39) [7]> Roman_S (18.03.2007 13:27:05) [5]
Таймер на 100 мсек
← →
RASkov (2007-03-18 13:39) [8]> Сообщение выводится почему-то 6 раз: "Получилось!" Что не
> так?
Шесть раз в минуту срабатывает таймер
Поставь интервал по меньше и будет больше 6 раз
← →
RASkov (2007-03-18 13:52) [9]> [7] Anatoly Podgoretsky © (18.03.07 13:39)
> if (Hour1 = Hour2) and (Min1 = Min2)
> Таймер на 100 мсек
Interval=10000 все-таки наверное...
> И как обойтись без лишних переменных:
Ну например незачем делать каждый раз DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2); Глобальные переменные или свойства(поля) формы задействовать.
← →
Roman_S © (2007-03-18 18:52) [10]Ну например незачем делать каждый раз DecodeTime(DateTimePicker1.Time, Hour2, Min2, Sec2, MSec2); Глобальные переменные или свойства(поля) формы задействовать.
- это дельный совет, СПАСИБО!
← →
Johnmen © (2007-03-18 20:17) [11]Trunc(Frac(TimeVariable)*24) - часы
Trunc(Frac(TimeVariable-часы/24)*24*60) - минуты
Страницы: 1 вся ветка
Текущий архив: 2007.04.08;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.029 c