当给定指定的工作日时,如何查找目标日期

本文关键字:何查找 查找 日期 目标 定指 工作日 | 更新日期: 2023-09-27 18:21:41

我有一种情况,用户定义了交货的工作日及其运输日。当给出预计到达(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日期。

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

当给定指定的工作日时,如何查找目标日期

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);

您可以做的是在不同的日子之间迭代,直到根据用户的偏好找到下一个交付日。你可以在这里看到一个例子:从今天开始获取下一个第N个星期五日期