AddBusinessDay DateTime扩展方法






3.60/5 (5投票s)
一个扩展方法,它扩展了AddDay方法,使其只包含工作日。
引言
我需要一个通用的解决方案来解决我们的国际配送需求,并且由于我们处理的是工作日,我们需要一种方法来考虑这一点。从 DateTime
类继承似乎是首选方案,但是 DateTime
类是密封的。因此最好的解决方案是使用扩展方法来解决这个问题(仅在 C# 3.0 及更高版本中可用?)。这是一个简单的解决方案,仅将星期六和星期日视为“假日”……请随意进一步扩展此方案,以包含您所在国家的国家假日/银行假日等。我的灵感来自以下 CodeProject 文章,我在 Google 上找到了这篇文章: Business Dates C#。
美国节假日 Web 服务
实际上,有一个 Web 服务 可用,它公开了美国的节假日,但我们(我的公司)将实施一种嵌入在我们现有架构中的不同解决方案。
Using the Code
非常简单!将此代码放在您喜欢的位置,它将扩展 DateTime
类(System.DateTime
)以添加以下方法 - AddBusinessDays(int days)
public static class DateTimeExtensions
{
public static DateTime AddBusinessDays(this DateTime date, int days)
{
double sign = Convert.ToDouble(Math.Sign(days));
int unsignedDays = Math.Sign(days) * days;
for (int i = 0; i < unsignedDays; i++)
{
do
{
date = date.AddDays(sign);
}
while (date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday);
}
return date;
}
}
扩展方法的工作方式与标准的 AddDays
方法完全相同。
如果您来这里是为了了解扩展方法,那么您可以看到它有多么容易。只需定义一个 static
类并随意命名它,然后在其中包含一个 static
方法,该方法将 this
作为第一个参数,即 DoWhateverYouWant(this type ref)
,因此如果您想为 DataTable
类编写扩展方法,您可以简单地执行
public static void DoWhateverYouWant(this DataTable myDataTable) { ... }
我的意图不是教授扩展方法 - 如果这是您感兴趣的,请查看 这篇文章。
扩展扩展方法(你就是喜欢 .NET)
正如我所说,请随意扩展此方案,以包含国家假日、本地化以及您能想到的任何其他内容!
历史
- 2007 年 8 月 10 日:初始发布