2010-10-22 41 views
1

我需要一个考虑到工作时间的TimeSpan。假设如果我们将TimeSpan配置为每天8小时,两天应该返回16小时而不是48小时。有人知道这样的课程吗?TimeSpan承认C的工作时间#

谢谢。

编辑

我需要相同的功能,但时间跨度与配置的一天时间。加,减,......应该考虑到这一点。我试图扩展TimeSpan,但它是封闭的。也许我应该去一些扩展方法来实现这个Oded建议(或类似的)。

+0

大多数情况下,您可能没有特别注意c#的用途,但以防万一:Excel支持您的要求。 – 2010-10-22 12:36:57

+0

相关:http://stackoverflow.com/questions/3492958/how-can-a-timespan-day-last-only-for-8-hours – 2010-10-22 16:53:53

回答

2

如果你只是想每天要弄清楚为8个小时,你可以这样做:

return TimeSpan.TotalHours/3; 

更新:

现在,你提供了一些更详细,我建议包装时间跨度与您自己的类型 - 你可以有一个HoursInWorkingDay属性,它可以让你配置一个工作日的小时数。

有一个构造函数,需要一个时间跨度,并分配到可用于计算的私人时间跨度:

public class WrappedTimeSpan 
{ 
    private TimeSpan ts; 
    private int hoursInDay = 8; 

    public WrappedTimeSpan(TimeSpan origTS) 
    { 
     ts = origTs; 
    } 

    public WrappedTimeSpan(TimeSpan origTS, int hoursInDay) : this(origTs) 
    { 
     hoursInDay = hoursInDay; 
    } 

    public int HoursInDay { get;} 

    public int WorkingHours { get { return ts.TotalHours/hoursInDay; }} 
} 

这可以扩展以满足您有任何其他要求。

+0

很短,很容易和很好+1 – 2010-10-22 10:05:16

+0

我一直在寻找更多完整的解决方案... – 2010-10-22 10:09:50

+3

你是否考虑过例如周一16:30和周二9:30(应该产生1小时),周五9h和周一9h(8h),跨文化差异在穆斯林世界(星期五是周日而不是周日),商业差异(并非所有工作都在9小时开始和/或在17小时结束)以及额外的信息比如加班和假期? – Dialecticus 2010-10-22 10:10:19