C# 需要找到周转时间吗
我在算帐。我有3个参数,如C# 需要找到周转时间吗,c#,C#,我在算帐。我有3个参数,如当前日期,达期和假日列表(日期)。 静态列表日期=新列表(); 静态DateTime StartDate=DateTime.Now; 静态void Main(字符串[]参数) { 添加(DateTime.Now.AddDays(20)); 添加(DateTime.Now.AddDays(10)); 添加(DateTime.Now.AddDays(3)); TatDueDateCalculator(DateTime.Now,10,Holidates); } 私有静态Dat
当前日期
,达期
和假日列表(日期)。
静态列表日期=新列表();
静态DateTime StartDate=DateTime.Now;
静态void Main(字符串[]参数)
{
添加(DateTime.Now.AddDays(20));
添加(DateTime.Now.AddDays(10));
添加(DateTime.Now.AddDays(3));
TatDueDateCalculator(DateTime.Now,10,Holidates);
}
私有静态DateTime TatDueDateCalculator(DateTime AssignDate、int TatPeriod、列表假日)
{
DateTime dueDate=AssignDate.AddDays(TatPeriod);
int holiDayCount=Holidays.FindAll(x=>x>=AssignDate&x dueDate>=AssignDate&dueDate 0)
dueDate=dueDate.AddDays(holiDayCount);
归还日期;
}
TatDueDateCalculator()
需要返回dueDate
情况如下:
假日
ListHoliday
仅包含一个匹配的dueDate
,但列表中的值较大李>
例如
DueDate
是“2019-05-13”
,假日列表包含以下日期。
“2019-05-10”
,“2019-05-13”
,“2019-05-12”
。在这种情况下,我得到了2
TAT。但是expected是1
下面的代码产生了预期的结果(根据您在注释中的示例)。它还包括最初在第一个到期日之后的假期
static void Main(string[] args)
{
var holidays = new List<DateTime>()
{
new DateTime(2019,05,03),
new DateTime(2019,05,04),
new DateTime(2019,05,06),
new DateTime(2019,05,10),
};
int tatPeriod = 5;
var assignDate = new DateTime(2019, 05, 01);
var dueDate = Enumerable.Range(0, tatPeriod + holidays.Count)
.Select(offset => assignDate.AddDays(offset))
.Except(holidays)
.ElementAt(tatPeriod - 1);
Console.WriteLine(dueDate);
Console.Read();
}
static void Main(字符串[]args)
{
var holidays=新列表()
{
新日期时间(2019,05,03),
新日期时间(2019,05,04),
新日期时间(2019,05,06),
新日期时间(2019年5月10日),
};
int-tatPeriod=5;
var assignDate=新日期时间(2019年5月1日);
var dueDate=可枚举的.Range(0,tatPeriod+holidays.Count)
.Select(offset=>assignDate.AddDays(offset))
。假期除外
.ElementAt(第1期);
控制台写入线(截止日期);
Console.Read();
}
以下代码生成预期结果(根据注释中的示例)。它还包括最初在第一个到期日之后的假期
static void Main(string[] args)
{
var holidays = new List<DateTime>()
{
new DateTime(2019,05,03),
new DateTime(2019,05,04),
new DateTime(2019,05,06),
new DateTime(2019,05,10),
};
int tatPeriod = 5;
var assignDate = new DateTime(2019, 05, 01);
var dueDate = Enumerable.Range(0, tatPeriod + holidays.Count)
.Select(offset => assignDate.AddDays(offset))
.Except(holidays)
.ElementAt(tatPeriod - 1);
Console.WriteLine(dueDate);
Console.Read();
}
static void Main(字符串[]args)
{
var holidays=新列表()
{
新日期时间(2019,05,03),
新日期时间(2019,05,04),
新日期时间(2019,05,06),
新日期时间(2019年5月10日),
};
int-tatPeriod=5;
var assignDate=新日期时间(2019年5月1日);
var dueDate=可枚举的.Range(0,tatPeriod+holidays.Count)
.Select(offset=>assignDate.AddDays(offset))
。假期除外
.ElementAt(第1期);
控制台写入线(截止日期);
Console.Read();
}
拉塞·维格斯·瑟尔·卡尔森的答案对我来说很有用。
链接:gist.github.com/lassevk/bbee7a626b3126ebb8e59a21ebdcb15b
代码:
public static DateTime tatduedatacalculator(DateTime assigningDate,int-tatCount,IEnumerable假日)
{
HashSet holidayLookup=newHashSet(holidays.Select(dt=>dt.Date));
DateTime dueDate=分配日期。日期;
而(tatCount>1)
{
dueDate=dueDate.AddDays(1);
while(holidayLookup.Contains(dueDate))
dueDate=dueDate.AddDays(1);
塔特肯——;
}
归还日期;
}
拉塞·维格斯·瑟尔·卡尔森的答案对我来说很有用。
链接:gist.github.com/lassevk/bbee7a626b3126ebb8e59a21ebdcb15b
代码:
public static DateTime tatduedatacalculator(DateTime assigningDate,int-tatCount,IEnumerable假日)
{
HashSet holidayLookup=newHashSet(holidays.Select(dt=>dt.Date));
DateTime dueDate=分配日期。日期;
而(tatCount>1)
{
dueDate=dueDate.AddDays(1);
while(holidayLookup.Contains(dueDate))
dueDate=dueDate.AddDays(1);
塔特肯——;
}
归还日期;
}
什么是周转时间?另一方面,TAT?TAT是指周转时间——这是指同意完成指定活动、步骤或流程的时间。TAT是一个指标,可能构成商定的SLA的一部分。TAT通常与“及时性”和“完整性”度量相关联。您能解释一下如何计算TAT,而不是代码吗?例如,我需要开始“2019-05-01”的工作,并在“2019-05-05”完成该工作。TAT周期为5。但在这期间,我有“2019-05-03”、“2019-05-04”、“2019-05-06”、“2019-05-10”等假期。在这种情况下,两天的假期和完成日期之间的一个工作日。因此,TAT期限增加了2天,那么我的新完成日期是“2019-05-07”。但我还有一个假期是“2019-05-06”,所以结果日期是“2019-05-08”。(工作日为:“2019-05-01”、“2019-05-02”、“2019-05-05”、“2019-05-07”、“2019-05-08”。@LasseVågsætherKarlsenIfTatPeriod
为1,您的意思是“返回开始日期”吗?什么是周转时间?TAT?TAT,另一方面,是指周转时间-这是约定完成指定活动、步骤或流程的时间。TAT是一个指标,可能构成商定SLA的一部分。TAT通常与“及时性”和“完整性”度量相关联。您能解释一下如何计算吗TAT,而非代码?例如,我需要在“2019-05-01”开始工作,并在“2019-05-05”完成该工作。TAT期限为5。但在这期间,我有“2019-05-03”、“2019-05-04”、“2019-05-06”、“2019-05-10”等假期。在这种情况下,完成日期之间有2天的假期和一个工作日。因此,TAT期限增加了2天,那么我的新完成日期是“2019-05-07”。
public static DateTime TatDueDateCalculator(DateTime assigningDate, int tatCount, IEnumerable<DateTime> holidays)
{
HashSet <DateTime> holidayLookup = new HashSet<DateTime>(holidays.Select(dt => dt.Date));
DateTime dueDate = assigningDate.Date;
while (tatCount > 1)
{
dueDate = dueDate.AddDays(1);
while (holidayLookup.Contains(dueDate))
dueDate = dueDate.AddDays(1);
tatCount--;
}
return dueDate;
}