2017-01-09 73 views
3

我有一个控件,您可以将元素拖入Gantt,如timetable。当天最低时间为8 a.m,最高时间为4 p.m。有没有一种优雅的方式,我可以告诉DateTime结构采取这个时间间隔,而不是24 hour one自定义日期时间天长度

+4

TimeSpan结构是否用于时间跨度? –

+1

是的。但这不是重点。如果我将8小时添加到“DateTime”中,它应该与添加1天具有相同的效果 – Andro

+2

我认为他想要做的是在基于从8开始到16结束的日期对结构进行时间计算(并且可能采用在周末也是如此),并提出像最早开始时间这样的问题XXX任务有30个小时的工作......什么时候完成? – DarkSquirrel42

回答

0

您当然不能改变DateTime现有方法的行为,但扩展方法在这里会派上用场。

根据您的要求,如果您将当前日期添加8小时,则您希望日期向前移动24小时。 (如果我的理解不正确,请纠正我)。

您可以使用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

确实...它不能解决这个特定的问题,但作者可以将它用作提示并对其进行定制以适应需求。 –