【问题标题】:Calculate StartDate when End Date & back days given给定结束日期和返回天数时计算开始日期
【发布时间】:2011-05-05 01:18:26
【问题描述】:

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

即结束日期:2011 年 5 月 5 日 返回天数:5

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

开始日期 = 29/04/2011

谢谢你,

【问题讨论】:

  • this answer 中查看AddBusinessDays() 并执行AddBusinessDays(endDate, -5) 或使用Fluent DateTime,它有类似的方法,而且还有更多内容。
  • 澄清 (05/5/2011) - 5 = (28/04/2011),对吗?不是 29/04/2011。想确定这是一个要求还是一个错字。

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


【解决方案1】:

我可能会这样做:

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;
}

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

【讨论】:

  • 感谢大家分享他们对这个问题的想法
  • 我试过了,它对我有用.. public DateTime CalcStartDate(DateTime EndDate, int daysBack) { DateTime StartDate = EndDate; for (int i = 1; i
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 感谢大家在这个问题上分享你的想法。我从马特的回答中提取了一些逻辑,并重写如下,满足我的要求。
    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多