我正在创建一个API,我需要减去一定数量的周期,并确保我只量化工作日(不包括周末和假日(,但我遇到了麻烦。
我找到了一些有用的解决方案,当我从dateTime.Now((中减去时,只捕捉工作日,但我也需要排除美国联邦假日。
我可能只是用一个循环滚动它,重复添加或替换一个周期,并在每次添加/替换时进行测试,如果当前一天被禁止,则替换一整天:
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作为周期,向前提供正
显然,您需要了解"美国联邦假日"有一些付费APIS提供这些数据,或者由于美国假日非常简单,请使用基于此构建的列表:https://www.law.cornell.edu/uscode/text/5/6103