|
Вопрос # 1 811/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Я недавно программирую на Delphi, помогите, пожалуйста.
Есть начало смены и окончание (например с 8-00 до 8-00) и перерыв на обед, как посчитать длительность смены?
 |
Вопрос задала: Marina (статус: Посетитель)
Вопрос отправлен: 11 августа 2008, 11:06
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, Marina!
Можно примерно так:
ShowMessage (TimeToStr(StrToTime('16:00')-StrToTime('8:00')-1/24)); // 1/24 - вычитает час на обед
Если смены длятся с переходом через судки, использовать StrToDate();
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 11 августа 2008, 11:42
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Шичко Игорь
Здравствуйте, Marina!
Кроме изложенного можно воспользоваться функцией: MinutesBetween(Time1, Time2: TDateTime) из модуля DateUtils.
Результат выводится в виде целого значения минут. Она вычисляет количество минут между двумя значениями времени.
Далее перевести значение в часы и минуты.
Для рекомендации: посмотрите функции модуля DateUtils, там очень много полезного для обработки временных показателей, а также категорию Datetime routines из Delphi Help.
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 11 августа 2008, 11:51
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Marina!
Дополнение к выше изложенным ответам...
Есть более простой путь для работы с датой и временем чем прибегать к функциям зашитым в DateUtil. На самом деле тип TDateTime является обычным real - числом с плавающей точкой, который содержит количество дней прошедших с 30 декабря 1899 года (под Windows) или с 1 января 1900 года под Linux. Таким образом целая часть - есть дни. Чтобы взять дату днём позже достаточно просто прибавить 1, неделей позже - прибавить 7. Дробная часть даты это время, причём в днях, т.е. 1 час это 1/24 или 0.0416(6), 1 минута будет равна 1/(24*60), а одна секунда соответственно 1/(24*3600). Ну дальше всё просто... не сложнее арифметики за 3 класс очень средней школы...
P.S. Желаю удачи.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 11 августа 2008, 14:41
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 11 августа 2008, 11:51; участников в обсуждении: 1.
|
ANBsoft (статус: Студент), 11 августа 2008, 11:51 [#1]:
Поправлюсь:
Если смены длятся с переходом через судки, использовать StrToDateTime(), а не StrToDate();
|
31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|