3

開始日が日で05/03/2012、期間が200日で、日曜日を除く終了日を取得したいと考えています。私の終了日が05/02/2013..誰かが私を助けることができるように

4

2 に答える 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

Time Period Library for .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 に答える