| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |