Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 02:22   #1
M1zantr0p
 
Регистрация: 21.04.2012
Сообщений: 5
Вопрос Корректно ли нахождение разницы во времени?

Проверьте пожалуйста, кому не лень, корректность кода, можно-ли как-то сделать проще или более эффективно?

На форме 3 компонента TDateTimePicker: tp1, tp2, tp3. Tp3 получает через функцию now текущие дату и время. Требуется получить разницу во времени между tp1 и tp3 (tp1-tp3), при этом необходимо учесть, что в tp1 время может быть меньше чем в tp3.
И в tp2 надо поместить "чистое" время без даты (найденную разницу).

Вот что я написал:
Код:
if tp1.time>tp3.time then 
 tp1.Date:=tp3.Date 
else 
 tp1.Date:=incday(tp3.Date);
tp2.datetime:=tp1.dateTime-tp3.dateTime;
M1zantr0p вне форума Ответить с цитированием
Старый 21.04.2012, 07:17   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Корректное вычитание (сложение) времени лучше делать специализированными функциями:
- получить разницу во времени в секундах функцией SecondsBetween;
- для получения новой даты/времени вычесть из даты полученное количество секунд функцией IncSecond;
- оставить только время в новой дате, убрав дату функцией TimeOf (впрочем, в tp2 будет показано только время, если Kind = dtkTime).

Простое вычитание не даст ожидаемых результатов, хотя, казалось бы, вычитание (сложение) двух числовых величин, коими натурально являются данные типа TDateTime, не должно дать осечки. Тем не менее.

Последний раз редактировалось Karabash; 21.04.2012 в 07:56.
Karabash вне форума Ответить с цитированием
Старый 03.05.2012, 20:51   #3
M1zantr0p
 
Регистрация: 21.04.2012
Сообщений: 5
По умолчанию

Это простой будильник, поэтому точность в 1 секунду не критична
Спасибо
M1zantr0p вне форума Ответить с цитированием
Старый 03.05.2012, 21:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Простое вычитание не даст ожидаемых результатов
И самое веселое - SecondsBetween только и делает, что из одной даты/времени вычитает другую и умножает на число секунд в сутках, ну и в int64 результат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение Разницы Между датами reihtmonbern Помощь студентам 16 14.10.2011 12:19
Задача на нахождение максимальной разницы между вырученными и потраченными деньгами) Вася Маклауд Помощь студентам 2 14.06.2011 18:07
Как корректно определить границы кучи в любой момент времени без использования функций менеджера дрп в си DartLenin Общие вопросы C/C++ 0 18.12.2010 21:15
Вычисление разницы дат Dux Общие вопросы Delphi 10 14.09.2010 15:41
Триггер на подсчет разницы DaMadQuest SQL, базы данных 2 27.03.2010 13:26