65.9K
CodeProject 正在变化。 阅读更多。
Home

AddBusinessDay DateTime扩展方法

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.60/5 (5投票s)

2007年8月10日

CPOL

2分钟阅读

viewsIcon

32184

一个扩展方法,它扩展了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 日:初始发布
© . All rights reserved.