我有我的开始日期05/03/2012
和持续时间200
现在是几天我想得到不包括星期日的结束日期。所以我的结束日期应该是05/02/2013
..有人可以帮助我吗
问问题
845 次
2 回答
1
帮我试试这个:
var startDate = new DateTime(2012, 5, 3);
var sundaysOverDuration = 200 / 7;
var actualDuration = 200 + sundaysOverDuration;
var newDate = startDate.AddDays(actualDuration);
老实说,我也不得不承认,这个链接在处理这些类型计算时存在的许多异常方面非常优雅。我不确定你是否需要这么复杂的东西,但值得让你知道。我将内联代码只是为了确保在链接断开时保留它。
public static double GetBusinessDays(DateTime startD, DateTime endD)
{
double calcBusinessDays =
1 + ((endD-startD).TotalDays * 6 -
(startD.DayOfWeek-endD.DayOfWeek) * 2) / 7;
if ((int)startD.DayOfWeek == 0) calcBusinessDays --;
return calcBusinessDays;
}
public static DateTime AddWorkDaysToStartDate(DateTime startD, double businessDays)
{
int DoW = (int)startD.DayOfWeek;
double temp = businessDays + DoW + 1;
if (DoW != 0) temp --;
DateTime calcendD = startD.AddDays(
Math.Floor(temp / 6)*2-DoW + temp
- 2* Convert.ToInt32(temp % 6 == 0)) ;
}
最后,根据您的问题,您似乎不需要处理假期,但如果您这样做,解决方案会复杂得多,并且需要数据库驱动,所以请记住这一点。
于 2012-09-18T10:50:32.840 回答
0
您可以使用.NET 的时间段库中的CalendarDateAdd类:
// ----------------------------------------------------------------------
public void AddDaysSample()
{
CalendarDateAdd calendarDateAdd = new CalendarDateAdd();
calendarDateAdd.AddWorkingWeekDays();
calendarDateAdd.WeekDays.Add( DayOfWeek.Saturday );
DateTime start = new DateTime( 2012, 5, 3 );
TimeSpan duration = new TimeSpan( 200, 0, 0, 0 );
DateTime? end = calendarDateAdd.Add( start, duration );
Console.WriteLine( "AddDaysSample : {0:d} + {1} days = {2:d}", start, duration.Days, end );
} // AddDaysSample
于 2012-09-18T11:19:46.053 回答