2013-07-10 2 views
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.

Какова наилучшая практика для архивирования запроса?

ответ

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

Ваш образец кодирования служил именно то, что я ищу! Спасибо вам большое, @Damith. – user2566818

0

Что вы можете сделать, это перебирать между днями, пока не найдете следующий день доставки в соответствии с предпочтениями пользователя. Вы можете увидеть пример этого здесь: Get Next Nth Fridays Date From Todays Date

Смежные вопросы