2017-01-09 124 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

確實...它不能解決這個特定的問題,但作者可以將它用作提示並對其進行定製以適應需求。 –