Нужна библиотека для работ с датами с изменяемым календарем
Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки.
И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.
Примерно так как работает MS Project с календарями.
Типа MyDate.AddHour(24,"MyCalendar")
Это очень и очень нетривиально. По одной простой причине, в разных странах разные понятия, что такое +24 часа к сегодня. Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое.
Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
Здравствуйте, Ватакуси, Вы писали:
H>>Есть готовые решения? или писать самому.
В>Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое. В>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
С точки зрения "+24", все это сводится к одной цифре — количество рабочих часов в конкретной дате.
А для получения количества рабочих часов можно попробовать попарсить производственный календарь (его же где-то публикуют, я думаю).
В>>Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое. В>>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п. M>С точки зрения "+24", все это сводится к одной цифре — количество рабочих часов в конкретной дате. M>А для получения количества рабочих часов можно попробовать попарсить производственный календарь (его же где-то публикуют, я думаю).
Да. Для конкретно взятой страны, это подъёмно. Но что, если у тебя международная контора, которая сидит в 70 странах с разными календарями? Да ещё которые и меняются время от времени?
+24 в одном месте может означать не тоже самое, что +24 в другом месте для одной и той же конторы.
Здравствуйте, Hermitap, Вы писали:
H>Всем доброго.
H>Нужна библиотека для работ с датами с изменяемым календарем H>Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки. H>И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.
H>Примерно так как работает MS Project с календарями. H>Типа MyDate.AddHour(24,"MyCalendar")
H>Есть готовые решения? или писать самому.
H>Спасибо.
Вряд ли такое есть готовое — производственный календарь у каждый страны разный. А есть ещё региональные праздники. А есть ещё локальные ограничения компании и её филиалов (если это делается для какой-то компании).
Здравствуйте, Hermitap, Вы писали: H>Есть готовые решения? или писать самому.
В екселе есть встроенная функция AddWorkDays. H>Спасибо.
Готовая мне неизвестна, но в принципе реализовать можно. Самое трудное тут — способ описания того самого рабочего календаря.
Можно же вручную — тупо принимаешь на вход набор "нерабочих" слотов в виде (IEnumerable/IList)<(DateTimeOffset start, TimeSpan duration)>, и поехали.
Но мало кому захочется перечислять все ночи, обеды, субботы и воскресенья в году. Появится искушения описывать их в параметрическом виде, как какие-то повторяюшиеся различной природы (от простых "каждая суббота" до "вторых воскресений каждого Сентября").
Вообще, это мне напоминает задачу с какого-то собеседования
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Hermitap, Вы писали:
H>Всем доброго.
H>Нужна библиотека для работ с датами с изменяемым календарем H>Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки. H>И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.
Есть iCalendar (RFC 2445, 5545), есть реализации на разных языках. Имел с этим счастье в ++, для # Google подсказывает, например, https://github.com/rianjs/ical.net
Здравствуйте, Ватакуси, Вы писали:
H>>Есть готовые решения? или писать самому.
В>Это очень и очень нетривиально. По одной простой причине, в разных странах разные понятия, что такое +24 часа к сегодня. Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое. В>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
Так я и написал что по аналогии с проджектом. Там календарь можно настроить. Вот по предварительной настройке и будет работать математика.
Причем настроить можно не только через интерфейс но и програмно.
В проджекте все прекрасно работает. Описал свой календарь. С выходными с пересменками обедами и т д. И подставляешь как параметр в функцию.
Она все и считает правильно. Функция называется ProjDateAdd(Дата, Длительность, Календарь)
Но она встроена в Project. И без проджекта ее нельзя использовать.
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, Hermitap, Вы писали:
H>>Есть готовые решения? или писать самому. МР>Возможно, подойдет вот это https://www.nuget.org/packages/Mindbox.WorkingCalendar
МР>Не могу оценить это решение, т.к., как ни странно, но с подобной задачей не сталкивался раньше.
Вам кстати отдельное еще раз спасибо за наводку на VSTO. Сейчас переписываю один старый проект на VSTO + MS Project
У меня C# не основной язык. Я специализируюсь на SAP ABAP Потому про VSTO не знал. Сейчас изучил VSTO. Интегрирую SAP с MS Project
через VSTO+SAP Dot net connector.