我有一种情况,即用户定义交货的工作日及其过境日。 当给出估计到达(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
日期。
归档此请求的最佳做法是什么?
答案 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