结束日期时计算StartDate&回来的日子

时间:2011-05-05 01:18:26

标签: c# .net asp.net vb.net date

我正在开发c#.net解决方案,我必须根据提供的结束日期和持续时间(返回天数)计算开始日期而不用周末。

即。结束日期:05/5/2011      返回日期:5

开始日期=(2011年5月5日) - 5天(不包括周末)

开始日期= 29/04/2011

谢谢你,

3 个答案:

答案 0 :(得分:0)

这样的事情可能就是我要做的事情:

DateTime CalcStartDate(DateTime endTime, int daysBack)
{
    DateTime startTime = endTime.Date;

    while (daysBack > 0)
    {
        startTime = startTime.AddDays(-1);
        if (startTime.DayOfWeek != DayOfWeek.Saturday && startTime.DayOfWeek != DayOfWeek.Sunday)
        {
            --daysBack;
        }
    }

    return startTime;
}

甚至更好,Bala建议使用图书馆。日期和时间很混乱,经过强化/测试的库通常是一个不错的选择。

答案 1 :(得分:0)

Bala R的答案是正确的。以下是有关如何使用AddBusinessDays()方法的文章的链接:

http://www.codeproject.com/KB/cs/AddBusinessDay.aspx

答案 2 :(得分:0)

我不知道你要走多远。如果它回溯很多天,那么循环这些日子可能会占用大量CPU资源。好吧,可能不是现代处理器...

我决定在没有循环的情况下实现解决方案。 我的代码有点难以阅读,但它在性能方面应该更有效。

public static class DateTimeExtensions
{
    public static DateTime SubtractBusinessDays(this DateTime fromDateTime, int days)
    {
        var subtractDays = days % 5;
        var dayNumber = fromDateTime.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)fromDateTime.DayOfWeek;
        var addDays = Math.Max(dayNumber - 5, 0);
        var result = fromDateTime.AddDays(addDays - subtractDays - (days / 5 * 7));
        if ((addDays + dayNumber) % 7 <= subtractDays)
            result = result.AddDays(-2);
        return result;
    }
}