2017-01-09 4 views
3

У меня есть элемент управления, в котором вы можете перетаскивать элементы в Gantt, как timetable. Самое маленькое время дня: 8 a.m, а наибольшее время - 4 p.m. Есть ли элегантный способ, который я мог бы сказать структуре DateTime, чтобы взять этот временной интервал вместо 24 hour one?Custom DateTime day length

+4

Не используется ли структура 'TimeSpan' для временных интервалов? –

+1

Да. Но дело не в этом. Если я добавлю 8 часов в 'DateTime', он должен иметь тот же эффект, что и добавление 1 дня – Andro

+2

. Я думаю, что он хочет сделать, чтобы сделать timecalculation на структуре на основе дня, начинающегося с 8 и заканчивающегося на 16 (и, вероятно, вне выходных тоже) и задать вопросы, как раннее время начала XXX задача имеет 30 часов работы ... когда ist сделано? – DarkSquirrel42

ответ

0

Вы, конечно же, не можете изменить поведение существующих методов DateTime, но методы расширения будут полезны здесь.

Согласно вашему требованию вы хотите, чтобы дата двигалась вперед 24 часа, если вы добавили 8 часов к текущей дате. (Исправьте меня, если мое понимание неверно).

Вы можете создать метод расширения с помощью AddWorkHours (или может быть чем-то более подходящим для ваших соглашений об именах), который займет несколько часов в качестве входных данных (например, 8), но фактически добавит 24 часа к текущей дате.

Код будет выглядеть следующим образом.

public class DateTimeExtensions 
{ 
    public static DateTime AddWorkHours(this DateTime dateTime, int workHours) 
    { 
     var workHoursPerday = 8; //Here 8 also can be configurable value if you have different working hours for different customer. 
     var daysToAdd = (int) workHours/workHoursPerday; //You can have validation here to check if workHours are in exact multiplex of 8. 
     //Also you can have rounding off logic. 
     dateTime.AddDays(daysToAdd); 
    } 
} 

Вам просто нужно убедиться, что вы вызываете правильный метод в своем звонке в надлежащих местах. Надеюсь, это по крайней мере даст некоторую идею для решения вашей проблемы.

+0

Это хорошая попытка, но я не вижу проблем, что этот код исправляет –

+0

Это общая логика. Вы всегда можете настроить логику в соответствии с вашими бизнес-требованиями. Проверка на день недели и изменение количества дней, чтобы добавить, решит выходные выходные тоже. –

+0

Истинный ... он не решает эту конкретную проблему, но автор может использовать ее в качестве подсказки и настраивать ее в соответствии с потребностями. –

Смежные вопросы