#java
#java
Вопрос:
У меня есть куча временных меток, на которые нанесены соответствующие операции (изгиб, лазер и т. Д.) У меня есть часы в день, которые мы открыты (16 часов или определенные часы, например, с 2:30 до 11:00 вечера)
Основываясь на множестве временных меток (с начальным и конечным временем) с этой операцией и пользователем, выполняющим ее, как я могу определить из 18 часов, которые мы открыты, сколько часов работает эта машина?
Я представил сумму всех различий во времени, но, по-видимому, требуется сравнить каждую временную метку и найти, что часы не заняты, например, если 2-10 — это когда мы открыты, и одна партия выполняется с 2-4, а другая с 3-4, тогда мы не заняты в течение 6 часов.
Возможно ли это, если да, то как?
Комментарии:
1. Было бы хорошо, если бы вы могли публиковать примеры данных
Ответ №1:
Предположительно, время окончания и время начала сопоставлены.
В самом простом:
занято = сумма всех (время окончания — время начала) для каждого действия.
Возьмите 2:
- Создайте класс, который представляет временной интервал (имеет время начала и время окончания).
- Внедрите компаратор для класса TimeSpan, который сортирует по времени начала.
- Запустите свой список пар времени начала и окончания и создайте интервал времени для каждого, добавьте это в список.
- Отсортируйте список с помощью компаратора временных интервалов.
- Запустите список (один раз) и объедините любые временные интервалы, которые перекрываются. Перекрытие == если время начала 2-го временного интервала меньше времени окончания 1-й временной метки, происходит перекрытие.
- Чтобы создать объединенный временной интервал, время начала — это время начала 1-й временной метки, а время окончания — это время, которое когда-либо заканчивается позже (например. 1-е время окончания — 2p, 2-е время окончания — 2:01p, 2-е время окончания — это время окончания объединенного временного интервала).
- После запуска списка и объединения промежутков любое время, не охваченное промежутком, представляет неиспользованное время.
Комментарии:
1. @dah Вы бы изменили это, если бы вы были открыты с 2-10 (8 часов), а один пакет выполнялся с 2-4 (2 часа), а другой с 3-4 (1 час), тогда вы можете взять общее время открытия и вычесть время занятости: 8 — 3 = 5; в этом примере ничего не происходилов течение 5 часов. Анализ временных меток и суммирование времени должны быть довольно простой задачей.
Ответ №2:
Между этими двумя способами нет арифметической разницы. Сумма дельт временных меток между запусками и завершениями одного и того же события — это использованное время, затем вычитание этого из общего времени дает неиспользованное время. Или сумма дельт от времени завершения одного события до времени начала следующего события — это неиспользованное время, затем вычитание этого из общего времени дает используемое время. Ответ тот же.
Комментарии:
1. Вы правы, но мы говорим о двух машинах, на которых работают разные пакеты.
2. Я не понимаю, как это имеет какое-либо значение. Если это произойдет, это будет связано с тем, что измерение времени от окончания одного события на одной машине до начала события на другой машине недопустимо, что является аргументом в пользу того, что вы уже делаете.