0

ユーザーが配達の平日とその通過日を定義する状況があります。到着予定日 (ETA) の日付が指定されている場合、トランジット日に基づいて到着予定日 (ETD) を計算する必要があります。

例:

ETA is 17/Jul/2013, Transit Day: 10 Days, Delivery Day: Tue / Fri

を使用するAddDays(-10)と、ETD は になります8/Jul/2013 (Mon)。配達日がドロップオンTueまたはでないためFri、システムはカレンダーをさかのぼる必要があります。

その結果、システムは日付を取得する必要があり5/Jul (Fri)ますETD

このリクエストをアーカイブするベスト プラクティスは何ですか?

4

2 に答える 2

2
public DateTime GetLastPosibleDate(DateTime datetime, List<DayOfWeek> days)
{
    DateTime dt = datetime;
    if (!days.Any(d=> d==dt.DayOfWeek))
    {
        dt=  GetLastPosibleDate(datetime.AddDays(-1), days);
    }
    return dt;
}

public DateTime EstimatedDiliveryDate(DateTime arrival, int transitDays, List<DayOfWeek> deliveryDays)
{
    return GetLastPosibleDate(arrival.AddDays(-transitDays), deliveryDays);
}

利用方法 :

var arrival = new DateTime(2013,07,17);
var deliveryDays = new List<DayOfWeek>(){DayOfWeek.Tuesday, DayOfWeek.Friday};
var result = EstimatedDiliveryDate(arrival, 10, deliveryDays);
于 2013-07-10T04:41:53.187 に答える
0

できることは、ユーザーの好みに応じて次の配達日が見つかるまで、日を繰り返すことです。この例をここで見ることができます:今日の日付から次の N 番目の金曜日の日付を取得する

于 2013-07-10T04:12:42.487 に答える