我正在开发c#.net解决方案,我必须根据提供的结束日期和持续时间(后天)计算开始日期而不用周末。计算结束日期和返回天数时的StartDate
即截止日期:2011年5月5日 回天:5
开始日期=(2011年5月5日) - 5日(不包括周末)
开始日期= 29/04/2011
感谢你,
我正在开发c#.net解决方案,我必须根据提供的结束日期和持续时间(后天)计算开始日期而不用周末。计算结束日期和返回天数时的StartDate
即截止日期:2011年5月5日 回天:5
开始日期=(2011年5月5日) - 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 R正确答案。下面是文章的链接了解如何使用AddBusinessDays()方法:
我不知道你会怎么早去。如果这是很多天,那么循环遍历这些日子可能会占用很多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;
}
}
谢谢大家分享你对这个问题的想法..我从马特的回答中找出了一些逻辑,并重写了下面的符合我的要求。 – Zeon05 2011-05-05 04:57:59
见'AddBusinessDays()'在[这个答案](http://stackoverflow.com/questions/1044688/add-business-days-and-getbusinessdays/1044821#1044821),做'AddBusinessDays(结束日期,-5)'或使用[Fluent DateTime](http://fluentdatetime.codeplex.com/),它有一个类似的方法和更多的内容。 – 2011-05-05 01:22:41
澄清(05/5/2011) - 5 =(28/04/2011),对吧?不是29/04/2011。要确定这是否是要求或错字。 – 2011-05-05 04:20:46