Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 811

/ вопрос решён /

Приветствую, уважаемые эксперты!
Я недавно программирую на Delphi, помогите, пожалуйста.
Есть начало смены и окончание (например с 8-00 до 8-00) и перерыв на обед, как посчитать длительность смены?

Marina Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: 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

ANBsoft (статус: Студент), 11 августа 2008, 11:51 [#1]:

Поправлюсь:
Если смены длятся с переходом через судки, использовать StrToDateTime(), а не StrToDate();

31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 20 марта 2023, 22:19
Выполнено за 0.02 сек.
Рейтинг@Mail.ru