C# 以C表示确认工作时间的TimeSpan#
我需要一个考虑到工作时间的时间跨度。假设我们将TimeSpan配置为8小时一天,那么两天应该返回16个总小时,而不是48个小时。有人知道这样的班级吗 谢谢 编辑C# 以C表示确认工作时间的TimeSpan#,c#,timespan,C#,Timespan,我需要一个考虑到工作时间的时间跨度。假设我们将TimeSpan配置为8小时一天,那么两天应该返回16个总小时,而不是48个小时。有人知道这样的班级吗 谢谢 编辑 我需要与timespan相同的功能,但具有可配置的日持续时间。加,减,…,应该考虑到这一点。我试着延长时间跨度,但它是密封的。也许我应该按照Oded的建议(或类似建议)使用一些扩展方法来实现这一点。如果您只想将每天计算为8个小时,您可以这样做: return TimeSpan.TotalHours / 3; 更新: 既然您提供了一些更
我需要与timespan相同的功能,但具有可配置的日持续时间。加,减,…,应该考虑到这一点。我试着延长时间跨度,但它是密封的。也许我应该按照Oded的建议(或类似建议)使用一些扩展方法来实现这一点。如果您只想将每天计算为8个小时,您可以这样做:
return TimeSpan.TotalHours / 3;
更新:
既然您提供了一些更详细的信息,我建议使用您自己的类型包装timespan—您可以在其中有一个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; }}
}
这可以扩展以满足您的任何其他要求。您是否考虑了诸如周一16:30到周二9:30之间的时间跨度(应为1小时)、周五9小时到周一9小时(8小时)、穆斯林世界的文化差异(周五是工作日而不是周日)、商业差异等示例(并不是所有的工作都在9小时开始和/或17小时结束),还有额外的信息,如加班和假期?@Carles-如果你想要一个更完整的解决方案(不管是什么意思),请提供一个更完整、更详细的问题。@Oded:我认为即使是从最初的问题开始,这个评论也是公平的。仅仅用小时除以3是行不通的(例如,“2天3小时”将返回为“17小时”,而不是“19小时”),并且不允许任何操作(同样,如果我在时间跨度上加上3小时,然后除以3,我只在原始跨度上加了一小时).@Dialogicus-时间跨度只是一个时间范围,它没有日历上下文。8小时是8小时,无论您尝试将其放在什么上下文中。很可能在您特别要求c#时没有用处,但以防万一:Excel支持您的要求。相关: