【问题标题】:Subtract DateTime in C# exluding weekends AND holidays [duplicate]在C#中减去DateTime,不包括周末和节假日[重复]
【发布时间】:2021-12-24 07:31:24
【问题描述】:

我正在创建一个 API,我需要减去一定数量的周期,并确保我只量化工作日(不包括周末和节假日),但我遇到了麻烦。

我找到了一些有用的解决方案,仅在我从 dateTime.Now() 中减去时捕获工作日,但我还需要排除美国联邦假日。

【问题讨论】:

  • 你遇到了什么麻烦?你试过什么?
  • 副本显示了如何执行此操作,前提是您已经有一个假期列表作为 List 或 HashSet
  • 这不应该作为重复关闭,因为重复只是不包括周末。这个问题还询问排除美国联邦假日的问题。我正在投票重新开放。
  • NuGet 上有一个名为 TimePeriodLibrary.NET 的免费库,非常适合解决此类问题。
  • @Bent this answer 似乎地址不包括特定的假期。

标签: c# asp.net-core datetime


【解决方案1】:

我可能只是用一个循环滚动它,重复添加或替换一个句点,并在每个添加/替换时测试当前日期是否被禁止,替换一整天:

  DateTime ScrollSkipping(DateTime start, TimeSpan period, int numPeriods, HashSet<DateTime> hashsetOfPublicHolidays){
    
    var d = start; //eg new DateTime(2021, 12, 26, 0, 30, 0);
    var t = period; //eg -1 hour to go backwards
    var skip = TimeSpan.FromDays(period<TimeSpan.Zero?-1:1);
    var p = numPeriods; // eg 25 times

    for(int x = 0; x < p;){
      if(d.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday || hashsetOfPublicHolidays.Contains(d.Date))
        d += skip;
      else{
        d += t; 
        x++;
      }
    }
  }

如果您提供了 TimeSpan.FromHours(-1); 作为周期数和 25 作为周期数,并且在您因某种原因跳过一整天时不要“用完”一个周期,然后在您回到正常日期,那么您将完全跳过周末/节假日。

要向后提供负的 TimeSpan 作为周期,向前提供正

【讨论】:

    【解决方案2】:

    显然您需要了解“美国联邦假期”有一些付费 APIS 可以提供这些数据,或者由于美国假期非常简单,请使用以下列表:https://www.law.cornell.edu/uscode/text/5/6103

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多