【问题标题】:How to find the target date when specified weekday is given如何在给出指定的工作日时找到目标日期
【发布时间】:2013-07-10 04:04:32
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net datetime


    【解决方案1】:
    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);
    

    【讨论】:

    • 您的示例编码正是我所期待的!非常感谢你,@Damith。
    【解决方案2】:

    您可以做的是在几天之间进行迭代,直到根据用户的偏好找到下一个交货日期。你可以在这里看到一个例子:Get Next Nth Fridays Date From Todays Date

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 2019-06-08
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多