Посоветуйте библиотеку(решение)
От: Hermitap Украина  
Дата: 31.01.22 17:43
Оценка:
Всем доброго.

Нужна библиотека для работ с датами с изменяемым календарем
Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки.
И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.

Примерно так как работает MS Project с календарями.
Типа MyDate.AddHour(24,"MyCalendar")

Есть готовые решения? или писать самому.

Спасибо.
Отредактировано 31.01.2022 17:47 Hermitap . Предыдущая версия . Еще …
Отредактировано 31.01.2022 17:47 Hermitap . Предыдущая версия .
Re: Посоветуйте библиотеку(решение)
От: Ватакуси Россия  
Дата: 01.02.22 13:24
Оценка:
H>Есть готовые решения? или писать самому.

Это очень и очень нетривиально. По одной простой причине, в разных странах разные понятия, что такое +24 часа к сегодня. Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое.
Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
Все будет Украина!
Re[2]: Посоветуйте библиотеку(решение)
От: Mihas  
Дата: 01.02.22 13:30
Оценка:
Здравствуйте, Ватакуси, Вы писали:

H>>Есть готовые решения? или писать самому.


В>Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое.

В>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
С точки зрения "+24", все это сводится к одной цифре — количество рабочих часов в конкретной дате.
А для получения количества рабочих часов можно попробовать попарсить производственный календарь (его же где-то публикуют, я думаю).
Re[3]: Посоветуйте библиотеку(решение)
От: Ватакуси Россия  
Дата: 01.02.22 15:04
Оценка: +1
В>>Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое.
В>>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.
M>С точки зрения "+24", все это сводится к одной цифре — количество рабочих часов в конкретной дате.
M>А для получения количества рабочих часов можно попробовать попарсить производственный календарь (его же где-то публикуют, я думаю).

Да. Для конкретно взятой страны, это подъёмно. Но что, если у тебя международная контора, которая сидит в 70 странах с разными календарями? Да ещё которые и меняются время от времени?
+24 в одном месте может означать не тоже самое, что +24 в другом месте для одной и той же конторы.
Все будет Украина!
Re: Посоветуйте библиотеку(решение)
От: Степанов Андрей  
Дата: 01.02.22 15:59
Оценка:
Здравствуйте, Hermitap, Вы писали:

H>Всем доброго.


H>Нужна библиотека для работ с датами с изменяемым календарем

H>Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки.
H>И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.

H>Примерно так как работает MS Project с календарями.

H>Типа MyDate.AddHour(24,"MyCalendar")

H>Есть готовые решения? или писать самому.


H>Спасибо.


Вряд ли такое есть готовое — производственный календарь у каждый страны разный. А есть ещё региональные праздники. А есть ещё локальные ограничения компании и её филиалов (если это делается для какой-то компании).
Re: Посоветуйте библиотеку(решение)
От: Vladek Россия Github
Дата: 02.02.22 14:14
Оценка:
Здравствуйте, Hermitap, Вы писали:

H>Есть готовые решения? или писать самому.


Надо гуглить по ключевым словам "business dates calculation".

https://www.codeproject.com/Articles/9503/Business-Dates-Calculation
https://github.com/CME64/WorkTimeCalculator
https://stackoverflow.com/questions/1617049/calculate-the-number-of-business-days-between-two-dates

Насколько хорошо библиотеки по первым двум ссылкам подойдут не знаю, но подглядеть идеи там можно.
Re: Посоветуйте библиотеку(решение)
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.22 14:29
Оценка:
Здравствуйте, Hermitap, Вы писали:
H>Есть готовые решения? или писать самому.
В екселе есть встроенная функция AddWorkDays.
H>Спасибо.
Готовая мне неизвестна, но в принципе реализовать можно. Самое трудное тут — способ описания того самого рабочего календаря.
Можно же вручную — тупо принимаешь на вход набор "нерабочих" слотов в виде (IEnumerable/IList)<(DateTimeOffset start, TimeSpan duration)>, и поехали.
Но мало кому захочется перечислять все ночи, обеды, субботы и воскресенья в году. Появится искушения описывать их в параметрическом виде, как какие-то повторяюшиеся различной природы (от простых "каждая суббота" до "вторых воскресений каждого Сентября").

Вообще, это мне напоминает задачу с какого-то собеседования
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Посоветуйте библиотеку(решение)
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.22 14:32
Оценка:
Здравствуйте, Hermitap, Вы писали:
H>Есть готовые решения? или писать самому.
https://stackoverflow.com/questions/4604461/c-sharp-datetime-to-add-subtract-working-days
https://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Посоветуйте библиотеку(решение)
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 02.02.22 14:59
Оценка:
Здравствуйте, Hermitap, Вы писали:

H>Есть готовые решения? или писать самому.

Возможно, подойдет вот это https://www.nuget.org/packages/Mindbox.WorkingCalendar

Не могу оценить это решение, т.к., как ни странно, но с подобной задачей не сталкивался раньше.
Re: Посоветуйте библиотеку(решение)
От: BigBoss  
Дата: 02.02.22 23:52
Оценка:
Здравствуйте, Hermitap, Вы писали:

H>Всем доброго.


H>Нужна библиотека для работ с датами с изменяемым календарем

H>Типа настроить некий календарь в котором указать рабочие нерабочие периоды, обеды пересменки.
H>И если например к дате прибавить 24 часа задачи прибавится с учетом нерабочих периодов.

Есть iCalendar (RFC 2445, 5545), есть реализации на разных языках. Имел с этим счастье в ++, для # Google подсказывает, например, https://github.com/rianjs/ical.net
Re[2]: Посоветуйте библиотеку(решение)
От: Hermitap Украина  
Дата: 03.02.22 07:06
Оценка:
Здравствуйте, Ватакуси, Вы писали:

H>>Есть готовые решения? или писать самому.


В>Это очень и очень нетривиально. По одной простой причине, в разных странах разные понятия, что такое +24 часа к сегодня. Где-то учитываются выходные, где-то нет, где-то только выходные, а праздники нет. Где-то и то и другое.

В>Где-то ещё местечковые праздники. Где-то ещё и религиозные, но только для гос. учереждений и т.п.

Так я и написал что по аналогии с проджектом. Там календарь можно настроить. Вот по предварительной настройке и будет работать математика.
Причем настроить можно не только через интерфейс но и програмно.
В проджекте все прекрасно работает. Описал свой календарь. С выходными с пересменками обедами и т д. И подставляешь как параметр в функцию.
Она все и считает правильно. Функция называется ProjDateAdd(Дата, Длительность, Календарь)
Но она встроена в Project. И без проджекта ее нельзя использовать.
Отредактировано 03.02.2022 7:16 Hermitap . Предыдущая версия .
Re[2]: Посоветуйте библиотеку(решение)
От: Hermitap Украина  
Дата: 03.02.22 07:09
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, 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.
Отредактировано 03.02.2022 7:15 Hermitap . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.