如何在指定工作日时找到目标日期

时间:2013-07-10 04:04:33

标签: c# .net datetime

我有一种情况,即用户定义交货的工作日及其过境日。 当给出估计到达(ETA)日期时,我需要根据过境日计算交付估计(ETD)日期。

示例:

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

使用AddDays(-10),ETD将为8/Jul/2013 (Mon)。由于交付日期不会在TueFri下降,系统需要向后查看日历。

因此,系统必须将5/Jul (Fri)作为ETD日期。

归档此请求的最佳做法是什么?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您可以做的是在几天之间进行迭代,直到您根据用户的偏好找到下一个交付日。您可以在此处查看此示例:Get Next Nth Fridays Date From Todays Date