C# 如何根据DateTime和在c中花费的天数计算经过的时间# 我想知道是否有任何图书馆/方法允许将日期和日期相加而不考虑复活节、圣诞节、星期六等的“无工作日”…< /P> 我知道存在方法DATETIME.ADD,但这并没有考虑“非工作日”。

C# 如何根据DateTime和在c中花费的天数计算经过的时间# 我想知道是否有任何图书馆/方法允许将日期和日期相加而不考虑复活节、圣诞节、星期六等的“无工作日”…< /P> 我知道存在方法DATETIME.ADD,但这并没有考虑“非工作日”。,c#,datetime,weekday,C#,Datetime,Weekday,多谢各位 您可以对时间间隔使用TimeSpan结构。下面是另一个stackoverflow线程的示例: 不,你必须定义自己的非工作日并构建自己的功能。有一个日期时间方法可以告诉你一周中的哪一天,因此你可以查看周六/周日,但其余的取决于你自己。如果你打算在Office中使用它,有一些DLL可以使用。否则,您可能会希望找到一个开源项目(有很多)来为您计算 DateTime.Now.DayOfWeek 这将是非常特定区域的,所以如果你计划在一个以上的国家使用你的代码,那是值得考虑的。另外,在美国,不

多谢各位

您可以对时间间隔使用TimeSpan结构。下面是另一个stackoverflow线程的示例:


不,你必须定义自己的非工作日并构建自己的功能。

有一个日期时间方法可以告诉你一周中的哪一天,因此你可以查看周六/周日,但其余的取决于你自己。如果你打算在Office中使用它,有一些DLL可以使用。否则,您可能会希望找到一个开源项目(有很多)来为您计算

DateTime.Now.DayOfWeek


<>这将是非常特定区域的,所以如果你计划在一个以上的国家使用你的代码,那是值得考虑的。另外,在美国,不同的州也有不同的假期。

我假设你想在给定开始日期和工作天数的情况下找到某件事情的结束日期

如果是这样,下面的代码可能就是您想要的。它假设您有一个列表,其中列出了您支持的最大时间范围内的所有假期。根据您的要求,这可能需要几年的时间

此代码获取开始日期和工作天数(以及假期列表),并返回结束日期

public static DateTime AddWorkingDays(DateTime start, int workingDays, IEnumerable<DateTime> holidays)
{
    var dict = new HashSet<DateTime>(holidays);
    DateTime date;

    for (date = start; workingDays > 0; date = date.AddDays(1))
    {
        if (!dict.Contains(date))
        {
            --workingDays;
        }
    }

    return date;
}
public static DateTime AddWorkingDays(DateTime start,int workingDays,IEnumerable holidays)
{
var dict=新哈希集(假日);
日期时间日期;
对于(日期=开始;工作日>0;日期=日期。添加日(1))
{
如果(!dict.Contains(日期))
{
--工作日;
}
}
返回日期;
}
另一种实现假设您可以调用一个谓词来确定一天是否为假日:

public static DateTime AddWorkingDays(DateTime start, int workingDays, Predicate<DateTime> isHoliday)
{
    DateTime date;

    for (date = start; workingDays > 0; date = date.AddDays(1))
    {
        if (!isHoliday(date))
        {
            --workingDays;
        }
    }

    return date;
}
public static DateTime AddWorkingDays(DateTime start、int workingDays、Predicate isHoliday)
{
日期时间日期;
对于(日期=开始;工作日>0;日期=日期。添加日(1))
{
如果(!isHoliday(日期))
{
--工作日;
}
}
返回日期;
}

这两种实现都会因访问每个日期而受到影响。这可能不是问题,但如果日期范围太大,则可能太慢。

这似乎是特定于区域设置的。。。不同的国家(事实上,在某些情况下,不同的城市)有不同的公共假日。出于这个原因,我认为不太可能有一个通用的图书馆。你需要向任何一个通用图书馆提供一份假期列表,如果你有这个列表,那么你想做的事情在任何情况下都是微不足道的。我在周六工作过。最后的评论有用吗?不管怎样@Ziba Leah:你必须为此编写自己的算法。我们做了很多日期操作,我不知道有什么内置方法可以满足您的要求,因为ohters建议它是特定于区域设置的。+1很好的链接。非常有效,除非bankHolidays列表中的假日数与日期范围相比较长,在这种情况下,它会变慢一点。