当给定指定的工作日时,如何查找目标日期
本文关键字:何查找 查找 日期 目标 定指 工作日 | 更新日期: 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)
。由于交付日期不是Tue
或Fri
,系统需要查看日历。
因此,系统必须将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个星期五日期