当结束日期&过去的日子

本文关键字:日子 过去 结束 日期 | 更新日期: 2023-09-27 17:54:41

我正在开发c#.net解决方案,我必须根据提供的结束日期和持续时间(过去的日子)计算开始日期,而没有周末。

。结束日期:2011年5月5日过去的日子:5

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

开始日期= 29/04/2011

谢谢你,

当结束日期&过去的日子

我可能会这样做:

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建议使用图书馆。日期和时间是混乱的,一个经过加固/测试的库通常是一个不错的选择。

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

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

我不知道你要追溯到多久以前。如果是很多天以前,那么循环这些天可能会占用一些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;
    }
}